105 lines
2.7 KiB
Go
105 lines
2.7 KiB
Go
package controllers
|
|
|
|
import (
|
|
"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"})
|
|
}
|
|
|
|
// 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)
|
|
}
|