221 lines
5.3 KiB
Go
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"})
|
|
}
|