246 lines
5.9 KiB
Go
246 lines
5.9 KiB
Go
package handler
|
|
|
|
import (
|
|
"dd_fiber_api/internal/admin_auth"
|
|
"dd_fiber_api/internal/admin_auth/service"
|
|
"strconv"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
)
|
|
|
|
// PermissionHandler 权限处理器
|
|
type PermissionHandler struct {
|
|
service *service.PermissionService
|
|
}
|
|
|
|
// NewPermissionHandler 创建权限处理器
|
|
func NewPermissionHandler(permissionService *service.PermissionService) *PermissionHandler {
|
|
return &PermissionHandler{
|
|
service: permissionService,
|
|
}
|
|
}
|
|
|
|
// ListPermissions 列出权限
|
|
func (h *PermissionHandler) ListPermissions(c *fiber.Ctx) error {
|
|
keyword := c.Query("keyword", "")
|
|
resource := c.Query("resource", "")
|
|
page, _ := strconv.Atoi(c.Query("page", "1"))
|
|
pageSize, _ := strconv.Atoi(c.Query("page_size", "10"))
|
|
|
|
permissions, total, err := h.service.ListPermissions(keyword, resource, page, pageSize)
|
|
if err != nil {
|
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "获取权限列表失败: " + err.Error(),
|
|
})
|
|
}
|
|
|
|
return c.Status(fiber.StatusOK).JSON(fiber.Map{
|
|
"success": true,
|
|
"message": "获取权限列表成功",
|
|
"data": fiber.Map{
|
|
"list": permissions,
|
|
"total": total,
|
|
"page": page,
|
|
"page_size": pageSize,
|
|
},
|
|
})
|
|
}
|
|
|
|
// GetPermission 获取权限详情
|
|
func (h *PermissionHandler) GetPermission(c *fiber.Ctx) error {
|
|
id := c.Query("id", "")
|
|
if id == "" {
|
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "权限ID不能为空",
|
|
})
|
|
}
|
|
|
|
permission, err := h.service.GetPermission(id)
|
|
if err != nil {
|
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "获取权限详情失败: " + err.Error(),
|
|
})
|
|
}
|
|
|
|
if permission == nil {
|
|
return c.Status(fiber.StatusNotFound).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "权限不存在",
|
|
})
|
|
}
|
|
|
|
return c.Status(fiber.StatusOK).JSON(fiber.Map{
|
|
"success": true,
|
|
"message": "获取权限详情成功",
|
|
"data": permission,
|
|
})
|
|
}
|
|
|
|
// CreatePermission 创建权限
|
|
func (h *PermissionHandler) CreatePermission(c *fiber.Ctx) error {
|
|
var req struct {
|
|
Name string `json:"name"`
|
|
Code string `json:"code"`
|
|
Resource string `json:"resource"`
|
|
Action string `json:"action"`
|
|
Description string `json:"description"`
|
|
}
|
|
|
|
if err := c.BodyParser(&req); err != nil {
|
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "请求参数解析失败: " + err.Error(),
|
|
})
|
|
}
|
|
|
|
if req.Name == "" {
|
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "权限名称不能为空",
|
|
})
|
|
}
|
|
|
|
if req.Code == "" {
|
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "权限代码不能为空",
|
|
})
|
|
}
|
|
|
|
if req.Resource == "" {
|
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "资源不能为空",
|
|
})
|
|
}
|
|
|
|
if req.Action == "" {
|
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "操作不能为空",
|
|
})
|
|
}
|
|
|
|
permission := &admin_auth.AdminPermission{
|
|
Name: req.Name,
|
|
Code: req.Code,
|
|
Resource: req.Resource,
|
|
Action: req.Action,
|
|
Description: req.Description,
|
|
}
|
|
|
|
if err := h.service.CreatePermission(permission); err != nil {
|
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "创建权限失败: " + err.Error(),
|
|
})
|
|
}
|
|
|
|
return c.Status(fiber.StatusOK).JSON(fiber.Map{
|
|
"success": true,
|
|
"message": "创建权限成功",
|
|
"data": permission,
|
|
})
|
|
}
|
|
|
|
// UpdatePermission 更新权限
|
|
func (h *PermissionHandler) UpdatePermission(c *fiber.Ctx) error {
|
|
var req struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
Code string `json:"code"`
|
|
Resource string `json:"resource"`
|
|
Action string `json:"action"`
|
|
Description string `json:"description"`
|
|
}
|
|
|
|
if err := c.BodyParser(&req); err != nil {
|
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "请求参数解析失败: " + err.Error(),
|
|
})
|
|
}
|
|
|
|
if req.ID == "" {
|
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "权限ID不能为空",
|
|
})
|
|
}
|
|
|
|
permission := &admin_auth.AdminPermission{
|
|
ID: req.ID,
|
|
Name: req.Name,
|
|
Code: req.Code,
|
|
Resource: req.Resource,
|
|
Action: req.Action,
|
|
Description: req.Description,
|
|
}
|
|
|
|
if err := h.service.UpdatePermission(permission); err != nil {
|
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "更新权限失败: " + err.Error(),
|
|
})
|
|
}
|
|
|
|
return c.Status(fiber.StatusOK).JSON(fiber.Map{
|
|
"success": true,
|
|
"message": "更新权限成功",
|
|
"data": permission,
|
|
})
|
|
}
|
|
|
|
// DeletePermission 删除权限
|
|
func (h *PermissionHandler) DeletePermission(c *fiber.Ctx) error {
|
|
id := c.Query("id", "")
|
|
if id == "" {
|
|
var req struct {
|
|
ID string `json:"id"`
|
|
}
|
|
if err := c.BodyParser(&req); err == nil {
|
|
id = req.ID
|
|
}
|
|
}
|
|
|
|
if id == "" {
|
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "权限ID不能为空",
|
|
})
|
|
}
|
|
|
|
if err := h.service.DeletePermission(id); err != nil {
|
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "删除权限失败: " + err.Error(),
|
|
})
|
|
}
|
|
|
|
return c.Status(fiber.StatusOK).JSON(fiber.Map{
|
|
"success": true,
|
|
"message": "删除权限成功",
|
|
})
|
|
}
|
|
|
|
// GetResources 获取所有资源列表
|
|
func (h *PermissionHandler) GetResources(c *fiber.Ctx) error {
|
|
resources, err := h.service.GetResources()
|
|
if err != nil {
|
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "获取资源列表失败: " + err.Error(),
|
|
})
|
|
}
|
|
|
|
return c.Status(fiber.StatusOK).JSON(fiber.Map{
|
|
"success": true,
|
|
"message": "获取资源列表成功",
|
|
"data": resources,
|
|
})
|
|
}
|
|
|