duidui_fiber/internal/admin_auth/handler/permission_handler.go
2026-03-27 10:34:03 +08:00

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,
})
}