262 lines
6.2 KiB
Go
262 lines
6.2 KiB
Go
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": "设置角色权限成功",
|
||
})
|
||
}
|
||
|