package controllers import ( "gitea.zjmud.xyz/phyer/rbac/services" "github.com/gin-gonic/gin" "strconv" ) // CreateRole 创建新角色 func CreateRole(c *gin.Context) { var roleData struct { Name string `json:"name" binding:"required"` Description string `json:"description"` } if err := c.ShouldBindJSON(&roleData); err != nil { c.JSON(400, gin.H{"error": err.Error()}) return } role, err := services.CreateRole(roleData.Name, roleData.Description) if err != nil { c.JSON(500, gin.H{"error": err.Error()}) return } c.JSON(201, role) } // GetRoles 获取所有角色 func GetRoles(c *gin.Context) { roles, err := services.GetAllRoles() if err != nil { c.JSON(500, gin.H{"error": err.Error()}) return } c.JSON(200, roles) } // CreatePermission 创建新权限 func CreatePermission(c *gin.Context) { var permissionData struct { Name string `json:"name" binding:"required"` Description string `json:"description"` Resource string `json:"resource" binding:"required"` Action string `json:"action" binding:"required"` } if err := c.ShouldBindJSON(&permissionData); err != nil { c.JSON(400, gin.H{"error": err.Error()}) return } permission, err := services.CreatePermission(permissionData.Name, permissionData.Description, permissionData.Resource, permissionData.Action) if err != nil { c.JSON(500, gin.H{"error": err.Error()}) return } c.JSON(201, permission) } // AssignRoleToUser 为用户分配角色 func AssignRoleToUser(c *gin.Context) { var assignmentData struct { UserID uint `json:"user_id" binding:"required"` RoleID uint `json:"role_id" binding:"required"` } if err := c.ShouldBindJSON(&assignmentData); err != nil { c.JSON(400, gin.H{"error": err.Error()}) return } err := services.AssignRoleToUser(assignmentData.UserID, assignmentData.RoleID) if err != nil { c.JSON(500, gin.H{"error": err.Error()}) return } c.JSON(200, gin.H{"message": "Role assigned successfully"}) } // AssignPermissionToRole 为角色分配权限 func AssignPermissionToRole(c *gin.Context) { var assignmentData struct { RoleID uint `json:"role_id" binding:"required"` PermissionID uint `json:"permission_id" binding:"required"` } if err := c.ShouldBindJSON(&assignmentData); err != nil { c.JSON(400, gin.H{"error": err.Error()}) return } err := services.AssignPermissionToRole(assignmentData.RoleID, assignmentData.PermissionID) if err != nil { c.JSON(500, gin.H{"error": err.Error()}) return } c.JSON(200, gin.H{"message": "Permission assigned successfully"}) } // GetPermission 获取单个权限 func GetPermission(c *gin.Context) { id := c.Param("id") permissionID, err := strconv.ParseUint(id, 10, 64) if err != nil { c.JSON(400, gin.H{"error": "Invalid permission ID"}) return } permission, err := services.GetPermissionByID(uint(permissionID)) if err != nil { c.JSON(500, gin.H{"error": err.Error()}) return } c.JSON(200, permission) } // UpdatePermission 更新权限 func UpdatePermission(c *gin.Context) { id := c.Param("id") permissionID, err := strconv.ParseUint(id, 10, 64) if err != nil { c.JSON(400, gin.H{"error": "Invalid permission ID"}) return } var updateData map[string]interface{} if err := c.ShouldBindJSON(&updateData); err != nil { c.JSON(400, gin.H{"error": err.Error()}) return } permission, err := services.UpdatePermission(uint(permissionID), updateData) if err != nil { c.JSON(500, gin.H{"error": err.Error()}) return } c.JSON(200, permission) } // DeletePermission 删除权限 func DeletePermission(c *gin.Context) { id := c.Param("id") permissionID, err := strconv.ParseUint(id, 10, 64) if err != nil { c.JSON(400, gin.H{"error": "Invalid permission ID"}) return } err = services.DeletePermission(uint(permissionID)) if err != nil { c.JSON(500, gin.H{"error": err.Error()}) return } c.JSON(200, gin.H{"message": "Permission deleted successfully"}) } // GetPermissions 获取所有权限 func GetPermissions(c *gin.Context) { permissions, err := services.GetAllPermissions() if err != nil { c.JSON(500, gin.H{"error": err.Error()}) return } c.JSON(200, permissions) } // GetRole 获取单个角色 func GetRole(c *gin.Context) { id := c.Param("id") roleID, err := strconv.ParseUint(id, 10, 64) if err != nil { c.JSON(400, gin.H{"error": "Invalid role ID"}) return } role, err := services.GetRoleByID(uint(roleID)) if err != nil { c.JSON(500, gin.H{"error": err.Error()}) return } c.JSON(200, role) } // UpdateRole 更新角色 func UpdateRole(c *gin.Context) { id := c.Param("id") roleID, err := strconv.ParseUint(id, 10, 64) if err != nil { c.JSON(400, gin.H{"error": "Invalid role ID"}) return } var updateData map[string]interface{} if err := c.ShouldBindJSON(&updateData); err != nil { c.JSON(400, gin.H{"error": err.Error()}) return } role, err := services.UpdateRole(uint(roleID), updateData) if err != nil { c.JSON(500, gin.H{"error": err.Error()}) return } c.JSON(200, role) } // DeleteRole 删除角色 func DeleteRole(c *gin.Context) { id := c.Param("id") roleID, err := strconv.ParseUint(id, 10, 64) if err != nil { c.JSON(400, gin.H{"error": "Invalid role ID"}) return } err = services.DeleteRole(uint(roleID)) if err != nil { c.JSON(500, gin.H{"error": err.Error()}) return } c.JSON(200, gin.H{"message": "Role deleted successfully"}) }