rbac/controllers/rbac.go
zhangkun9038@dingtalk.com 008c776d93 user fullname
2025-02-17 19:28:36 +08:00

221 lines
5.3 KiB
Go

package controllers
import (
"strconv"
"gitea.zjmud.xyz/phyer/rbac/services"
"github.com/gin-gonic/gin"
)
// 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"})
}