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