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

262 lines
6.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package handler
import (
"dd_fiber_api/internal/admin_auth"
"dd_fiber_api/internal/admin_auth/service"
"strconv"
"github.com/gofiber/fiber/v2"
)
// RoleHandler 角色处理器
type RoleHandler struct {
service *service.RoleService
}
// NewRoleHandler 创建角色处理器
func NewRoleHandler(roleService *service.RoleService) *RoleHandler {
return &RoleHandler{
service: roleService,
}
}
// ListRoles 列出角色
func (h *RoleHandler) ListRoles(c *fiber.Ctx) error {
keyword := c.Query("keyword", "")
page, _ := strconv.Atoi(c.Query("page", "1"))
pageSize, _ := strconv.Atoi(c.Query("page_size", "10"))
roles, total, err := h.service.ListRoles(keyword, 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": roles,
"total": total,
"page": page,
"page_size": pageSize,
},
})
}
// GetRole 获取角色详情
func (h *RoleHandler) GetRole(c *fiber.Ctx) error {
id := c.Query("id", "")
if id == "" {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
"success": false,
"message": "角色ID不能为空",
})
}
role, err := h.service.GetRole(id)
if err != nil {
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
"success": false,
"message": "获取角色详情失败: " + err.Error(),
})
}
if role == nil {
return c.Status(fiber.StatusNotFound).JSON(fiber.Map{
"success": false,
"message": "角色不存在",
})
}
return c.Status(fiber.StatusOK).JSON(fiber.Map{
"success": true,
"message": "获取角色详情成功",
"data": role,
})
}
// CreateRole 创建角色
func (h *RoleHandler) CreateRole(c *fiber.Ctx) error {
var req struct {
Name string `json:"name"`
Code string `json:"code"` // 可选,如果为空则由后端自动生成
Description string `json:"description"`
Status int `json:"status"`
}
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": "角色名称不能为空",
})
}
role := &admin_auth.AdminRole{
Name: req.Name,
Code: req.Code, // 如果为空service 层会自动生成
Description: req.Description,
Status: req.Status,
}
if err := h.service.CreateRole(role); 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": role,
})
}
// UpdateRole 更新角色
func (h *RoleHandler) UpdateRole(c *fiber.Ctx) error {
var req struct {
ID string `json:"id"`
Name string `json:"name"`
Code string `json:"code"`
Description string `json:"description"`
Status int `json:"status"`
}
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不能为空",
})
}
role := &admin_auth.AdminRole{
ID: req.ID,
Name: req.Name,
Code: req.Code,
Description: req.Description,
Status: req.Status,
}
if err := h.service.UpdateRole(role); 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": role,
})
}
// DeleteRole 删除角色
func (h *RoleHandler) DeleteRole(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.DeleteRole(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": "删除角色成功",
})
}
// GetRolePermissions 获取角色的权限列表
func (h *RoleHandler) GetRolePermissions(c *fiber.Ctx) error {
roleID := c.Query("role_id", "")
if roleID == "" {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
"success": false,
"message": "角色ID不能为空",
})
}
permissionIDs, err := h.service.GetRolePermissions(roleID)
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": permissionIDs,
})
}
// SetRolePermissions 设置角色的权限
func (h *RoleHandler) SetRolePermissions(c *fiber.Ctx) error {
var req struct {
RoleID string `json:"role_id"`
PermissionIDs []string `json:"permission_ids"`
}
if err := c.BodyParser(&req); err != nil {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
"success": false,
"message": "请求参数解析失败: " + err.Error(),
})
}
if req.RoleID == "" {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
"success": false,
"message": "角色ID不能为空",
})
}
if err := h.service.SetRolePermissions(req.RoleID, req.PermissionIDs); 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": "设置角色权限成功",
})
}