package handler import ( "strconv" "github.com/gin-gonic/gin" "gorm.io/gorm" "dianshang/internal/model" "dianshang/internal/service" "dianshang/pkg/response" ) type AdminRoleHandler struct { db *gorm.DB roleService *service.RoleService } func NewAdminRoleHandler(db *gorm.DB, roleService *service.RoleService) *AdminRoleHandler { return &AdminRoleHandler{ db: db, roleService: roleService, } } // GetRoles 获取角色列表 func (h *AdminRoleHandler) GetRoles(c *gin.Context) { page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) pageSize, _ := strconv.Atoi(c.DefaultQuery("page_size", "10")) keyword := c.Query("keyword") status := c.Query("status") conditions := make(map[string]interface{}) if keyword != "" { conditions["keyword"] = keyword } if status != "" { conditions["status"] = status } roles, pagination, err := h.roleService.GetRoleList(page, pageSize, conditions) if err != nil { response.ErrorWithMessage(c, response.ERROR, err.Error()) return } response.Success(c, gin.H{ "list": roles, "pagination": pagination, }) } // GetRole 获取角色详情 func (h *AdminRoleHandler) GetRole(c *gin.Context) { idStr := c.Param("id") id, err := strconv.ParseUint(idStr, 10, 32) if err != nil { response.BadRequest(c, "无效的角色ID") return } role, err := h.roleService.GetRoleByID(uint(id)) if err != nil { response.ErrorWithMessage(c, response.ERROR, err.Error()) return } response.Success(c, role) } // CreateRole 创建角色 func (h *AdminRoleHandler) CreateRole(c *gin.Context) { var req struct { Name string `json:"name" binding:"required"` Description string `json:"description"` Status uint8 `json:"status"` } if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, "请求参数错误") return } role := &model.Role{ Name: req.Name, Description: req.Description, Status: int(req.Status), } err := h.roleService.CreateRole(role) if err != nil { response.ErrorWithMessage(c, response.ERROR, err.Error()) return } response.Success(c, role) } // UpdateRole 更新角色 func (h *AdminRoleHandler) UpdateRole(c *gin.Context) { idStr := c.Param("id") id, err := strconv.ParseUint(idStr, 10, 32) if err != nil { response.BadRequest(c, "无效的角色ID") return } var req struct { Name string `json:"name"` Description string `json:"description"` Status uint8 `json:"status"` } if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, "请求参数错误") return } updates := make(map[string]interface{}) if req.Name != "" { updates["name"] = req.Name } if req.Description != "" { updates["description"] = req.Description } updates["status"] = req.Status err = h.roleService.UpdateRole(uint(id), updates) if err != nil { response.ErrorWithMessage(c, response.ERROR, err.Error()) return } response.Success(c, nil) } // DeleteRole 删除角色 func (h *AdminRoleHandler) DeleteRole(c *gin.Context) { idStr := c.Param("id") id, err := strconv.ParseUint(idStr, 10, 32) if err != nil { response.BadRequest(c, "无效的角色ID") return } err = h.roleService.DeleteRole(uint(id)) if err != nil { response.ErrorWithMessage(c, response.ERROR, err.Error()) return } response.Success(c, nil) } // GetPermissions 获取权限列表 func (h *AdminRoleHandler) GetPermissions(c *gin.Context) { page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) pageSize, _ := strconv.Atoi(c.DefaultQuery("page_size", "10")) keyword := c.Query("keyword") module := c.Query("module") status := c.Query("status") conditions := make(map[string]interface{}) if keyword != "" { conditions["keyword"] = keyword } if module != "" { conditions["module"] = module } if status != "" { conditions["status"] = status } permissions, pagination, err := h.roleService.GetPermissionList(page, pageSize, conditions) if err != nil { response.ErrorWithMessage(c, response.ERROR, err.Error()) return } response.Success(c, gin.H{ "list": permissions, "pagination": pagination, }) } // CreatePermission 创建权限 func (h *AdminRoleHandler) CreatePermission(c *gin.Context) { var req struct { Name string `json:"name" binding:"required"` DisplayName string `json:"display_name" binding:"required"` Description string `json:"description"` Module string `json:"module" binding:"required"` Resource string `json:"resource"` Action string `json:"action" binding:"required"` Status uint8 `json:"status"` } if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, "请求参数错误") return } permission := &model.Permission{ Name: req.Name, DisplayName: req.DisplayName, Description: req.Description, Module: req.Module, Resource: req.Resource, Action: req.Action, Status: int(req.Status), } err := h.roleService.CreatePermission(permission) if err != nil { response.ErrorWithMessage(c, response.ERROR, err.Error()) return } response.Success(c, permission) } // UpdatePermission 更新权限 func (h *AdminRoleHandler) UpdatePermission(c *gin.Context) { idStr := c.Param("id") id, err := strconv.ParseUint(idStr, 10, 32) if err != nil { response.BadRequest(c, "无效的权限ID") return } var req struct { Name string `json:"name"` Code string `json:"code"` Description string `json:"description"` Type string `json:"type"` Resource string `json:"resource"` Action string `json:"action"` } if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, "请求参数错误") return } updates := make(map[string]interface{}) if req.Name != "" { updates["name"] = req.Name } if req.Code != "" { updates["code"] = req.Code } if req.Description != "" { updates["description"] = req.Description } if req.Type != "" { updates["type"] = req.Type } if req.Resource != "" { updates["resource"] = req.Resource } if req.Action != "" { updates["action"] = req.Action } err = h.roleService.UpdatePermission(uint(id), updates) if err != nil { response.ErrorWithMessage(c, response.ERROR, err.Error()) return } response.Success(c, nil) } // DeletePermission 删除权限 func (h *AdminRoleHandler) DeletePermission(c *gin.Context) { idStr := c.Param("id") id, err := strconv.ParseUint(idStr, 10, 32) if err != nil { response.BadRequest(c, "无效的权限ID") return } err = h.roleService.DeletePermission(uint(id)) if err != nil { response.ErrorWithMessage(c, response.ERROR, err.Error()) return } response.Success(c, nil) } // AssignPermissionsToRole 为角色分配权限 func (h *AdminRoleHandler) AssignPermissionsToRole(c *gin.Context) { idStr := c.Param("id") roleID, err := strconv.ParseUint(idStr, 10, 32) if err != nil { response.BadRequest(c, "无效的角色ID") return } var req struct { PermissionIDs []uint `json:"permission_ids" binding:"required"` } if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, "请求参数错误") return } err = h.roleService.AssignPermissionsToRole(uint(roleID), req.PermissionIDs) if err != nil { response.ErrorWithMessage(c, response.ERROR, err.Error()) return } response.Success(c, nil) } // GetRolePermissions 获取角色权限 func (h *AdminRoleHandler) GetRolePermissions(c *gin.Context) { idStr := c.Param("id") roleID, err := strconv.ParseUint(idStr, 10, 32) if err != nil { response.BadRequest(c, "无效的角色ID") return } role, err := h.roleService.GetRoleByID(uint(roleID)) if err != nil { response.ErrorWithMessage(c, response.ERROR, err.Error()) return } response.Success(c, role.Permissions) } // AssignRolesToUser 为用户分配角色 func (h *AdminRoleHandler) AssignRolesToUser(c *gin.Context) { idStr := c.Param("id") userID, err := strconv.ParseUint(idStr, 10, 32) if err != nil { response.BadRequest(c, "无效的用户ID") return } var req struct { RoleIDs []uint `json:"role_ids" binding:"required"` } if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, "请求参数错误") return } err = h.roleService.AssignRolesToUser(uint(userID), req.RoleIDs) if err != nil { response.ErrorWithMessage(c, response.ERROR, err.Error()) return } response.Success(c, nil) } // GetUserRoles 获取用户角色 func (h *AdminRoleHandler) GetUserRoles(c *gin.Context) { idStr := c.Param("id") userID, err := strconv.ParseUint(idStr, 10, 32) if err != nil { response.BadRequest(c, "无效的用户ID") return } roles, err := h.roleService.GetUserRoles(uint(userID)) if err != nil { response.ErrorWithMessage(c, response.ERROR, err.Error()) return } response.Success(c, roles) } // GetUserPermissions 获取用户权限 func (h *AdminRoleHandler) GetUserPermissions(c *gin.Context) { idStr := c.Param("id") userID, err := strconv.ParseUint(idStr, 10, 32) if err != nil { response.BadRequest(c, "无效的用户ID") return } permissions, err := h.roleService.GetUserPermissions(uint(userID)) if err != nil { response.ErrorWithMessage(c, response.ERROR, err.Error()) return } response.Success(c, permissions) } // InitializeDefaultRoles 初始化默认角色和权限 func (h *AdminRoleHandler) InitializeDefaultRoles(c *gin.Context) { err := h.roleService.InitDefaultRolesAndPermissions() if err != nil { response.ErrorWithMessage(c, response.ERROR, err.Error()) return } response.Success(c, nil) }