feat():learning后台管理项目初始化
This commit is contained in:
182
internal/api/handlers/rbac_handler.go
Normal file
182
internal/api/handlers/rbac_handler.go
Normal file
@@ -0,0 +1,182 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"goalfymax-admin/internal/models"
|
||||
"goalfymax-admin/internal/services"
|
||||
"goalfymax-admin/pkg/utils"
|
||||
"strconv"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
// RBACHandler 简化的RBAC处理器
|
||||
type RBACHandler struct {
|
||||
rbacService services.RBACService
|
||||
response *utils.Response
|
||||
logger *utils.Logger
|
||||
}
|
||||
|
||||
// NewRBACHandler 创建RBAC处理器
|
||||
func NewRBACHandler(rbacService services.RBACService, logger *utils.Logger) *RBACHandler {
|
||||
return &RBACHandler{
|
||||
rbacService: rbacService,
|
||||
response: utils.NewResponse(),
|
||||
logger: logger,
|
||||
}
|
||||
}
|
||||
|
||||
// AssignRolePagePermissions 分配角色页面权限
|
||||
func (h *RBACHandler) AssignRolePagePermissions(c *gin.Context) {
|
||||
var req models.RolePagePermissionAssignRequest
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
h.logger.Error("参数绑定失败", zap.Error(err))
|
||||
h.response.Error(c, 400, "参数错误")
|
||||
return
|
||||
}
|
||||
|
||||
err := h.rbacService.AssignRolePagePermissions(&req)
|
||||
if err != nil {
|
||||
h.logger.Error("分配角色页面权限失败", zap.Error(err))
|
||||
h.response.Error(c, 500, "分配角色页面权限失败")
|
||||
return
|
||||
}
|
||||
|
||||
h.response.Success(c, "分配角色页面权限成功")
|
||||
}
|
||||
|
||||
// RemoveRolePagePermissions 移除角色页面权限
|
||||
func (h *RBACHandler) RemoveRolePagePermissions(c *gin.Context) {
|
||||
roleIDStr := c.Param("id")
|
||||
roleID, err := strconv.ParseUint(roleIDStr, 10, 32)
|
||||
if err != nil {
|
||||
h.logger.Error("角色ID格式错误", zap.Error(err))
|
||||
h.response.Error(c, 400, "角色ID格式错误")
|
||||
return
|
||||
}
|
||||
|
||||
var req struct {
|
||||
PageIDs []uint `json:"pageIds" binding:"required"`
|
||||
}
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
h.logger.Error("参数绑定失败", zap.Error(err))
|
||||
h.response.Error(c, 400, "参数错误")
|
||||
return
|
||||
}
|
||||
|
||||
err = h.rbacService.RemoveRolePagePermissions(uint(roleID), req.PageIDs)
|
||||
if err != nil {
|
||||
h.logger.Error("移除角色页面权限失败", zap.Error(err))
|
||||
h.response.Error(c, 500, "移除角色页面权限失败")
|
||||
return
|
||||
}
|
||||
|
||||
h.response.Success(c, "移除角色页面权限成功")
|
||||
}
|
||||
|
||||
// GetRolePagePermissions 获取角色页面权限
|
||||
func (h *RBACHandler) GetRolePagePermissions(c *gin.Context) {
|
||||
roleIDStr := c.Param("id")
|
||||
roleID, err := strconv.ParseUint(roleIDStr, 10, 32)
|
||||
if err != nil {
|
||||
h.logger.Error("角色ID格式错误", zap.Error(err))
|
||||
h.response.Error(c, 400, "角色ID格式错误")
|
||||
return
|
||||
}
|
||||
|
||||
pages, err := h.rbacService.GetRolePagePermissions(uint(roleID))
|
||||
if err != nil {
|
||||
h.logger.Error("获取角色页面权限失败", zap.Error(err))
|
||||
h.response.Error(c, 500, "获取角色页面权限失败")
|
||||
return
|
||||
}
|
||||
|
||||
h.response.Success(c, pages)
|
||||
}
|
||||
|
||||
// GetUserPermissions 获取用户权限
|
||||
func (h *RBACHandler) GetUserPermissions(c *gin.Context) {
|
||||
userIDStr := c.Param("id")
|
||||
userID, err := strconv.ParseUint(userIDStr, 10, 32)
|
||||
if err != nil {
|
||||
h.logger.Error("用户ID格式错误", zap.Error(err))
|
||||
h.response.Error(c, 400, "用户ID格式错误")
|
||||
return
|
||||
}
|
||||
|
||||
permissions, err := h.rbacService.GetUserPermissionsResponse(uint(userID))
|
||||
if err != nil {
|
||||
h.logger.Error("获取用户权限失败", zap.Error(err))
|
||||
h.response.Error(c, 500, "获取用户权限失败")
|
||||
return
|
||||
}
|
||||
|
||||
h.response.Success(c, permissions)
|
||||
}
|
||||
|
||||
// GetRolePermissions 获取角色权限
|
||||
func (h *RBACHandler) GetRolePermissions(c *gin.Context) {
|
||||
roleIDStr := c.Param("id")
|
||||
roleID, err := strconv.ParseUint(roleIDStr, 10, 32)
|
||||
if err != nil {
|
||||
h.logger.Error("角色ID格式错误", zap.Error(err))
|
||||
h.response.Error(c, 400, "角色ID格式错误")
|
||||
return
|
||||
}
|
||||
|
||||
permissions, err := h.rbacService.GetRolePagePermissionsResponse(uint(roleID))
|
||||
if err != nil {
|
||||
h.logger.Error("获取角色权限失败", zap.Error(err))
|
||||
h.response.Error(c, 500, "获取角色权限失败")
|
||||
return
|
||||
}
|
||||
|
||||
h.response.Success(c, permissions)
|
||||
}
|
||||
|
||||
// CheckPagePermission 检查页面权限
|
||||
func (h *RBACHandler) CheckPagePermission(c *gin.Context) {
|
||||
userIDStr := c.Query("user_id")
|
||||
pagePath := c.Query("page_path")
|
||||
|
||||
userID, err := strconv.ParseUint(userIDStr, 10, 32)
|
||||
if err != nil {
|
||||
h.logger.Error("用户ID格式错误", zap.Error(err))
|
||||
h.response.Error(c, 400, "用户ID格式错误")
|
||||
return
|
||||
}
|
||||
|
||||
hasPermission, err := h.rbacService.CheckUserPagePermission(uint(userID), pagePath)
|
||||
if err != nil {
|
||||
h.logger.Error("检查页面权限失败", zap.Error(err))
|
||||
h.response.Error(c, 500, "检查页面权限失败")
|
||||
return
|
||||
}
|
||||
|
||||
h.response.Success(c, gin.H{
|
||||
"hasPermission": hasPermission,
|
||||
"pagePath": pagePath,
|
||||
})
|
||||
}
|
||||
|
||||
// GetUserAccessiblePages 获取用户可访问页面
|
||||
func (h *RBACHandler) GetUserAccessiblePages(c *gin.Context) {
|
||||
userIDStr := c.Param("id")
|
||||
userID, err := strconv.ParseUint(userIDStr, 10, 32)
|
||||
if err != nil {
|
||||
h.logger.Error("用户ID格式错误", zap.Error(err))
|
||||
h.response.Error(c, 400, "用户ID格式错误")
|
||||
return
|
||||
}
|
||||
|
||||
pages, err := h.rbacService.GetUserAccessiblePages(uint(userID))
|
||||
if err != nil {
|
||||
h.logger.Error("获取用户可访问页面失败", zap.Error(err))
|
||||
h.response.Error(c, 500, "获取用户可访问页面失败")
|
||||
return
|
||||
}
|
||||
|
||||
h.response.Success(c, gin.H{
|
||||
"pages": pages,
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user