Files

142 lines
3.0 KiB
Go
Raw Permalink Normal View History

2026-01-15 13:51:44 +08:00
package handlers
import (
"fmt"
"strconv"
"github.com/gin-gonic/gin"
"github.com/niangaodev/art-code/models"
"github.com/niangaodev/art-code/repositories"
2026-01-16 17:03:34 +08:00
"github.com/niangaodev/art-code/utils"
2026-01-15 13:51:44 +08:00
)
2026-01-16 17:03:34 +08:00
// AdminGetRoles 获取所有角色
2026-01-15 13:51:44 +08:00
func AdminGetRoles(c *gin.Context) {
roles, err := repositories.GetRoles()
if err != nil {
2026-01-16 17:03:34 +08:00
utils.ServerError(c, err)
2026-01-15 13:51:44 +08:00
return
}
2026-01-16 17:03:34 +08:00
if roles == nil {
utils.Success(c, []interface{}{})
} else {
utils.Success(c, roles)
}
2026-01-15 13:51:44 +08:00
}
2026-01-16 17:03:34 +08:00
// AdminCreateRole 创建角色
2026-01-15 13:51:44 +08:00
func AdminCreateRole(c *gin.Context) {
var role models.Role
if err := c.ShouldBindJSON(&role); err != nil {
2026-01-16 17:03:34 +08:00
utils.Error(c, 400, "Invalid request")
2026-01-15 13:51:44 +08:00
return
}
if err := repositories.CreateRole(&role); err != nil {
2026-01-16 17:03:34 +08:00
utils.ServerError(c, err)
2026-01-15 13:51:44 +08:00
return
}
2026-01-16 17:03:34 +08:00
utils.SuccessWithMsg(c, "Role created successfully", gin.H{"id": role.ID})
2026-01-15 13:51:44 +08:00
}
2026-01-16 17:03:34 +08:00
// AdminUpdateRole 更新角色
2026-01-15 13:51:44 +08:00
func AdminUpdateRole(c *gin.Context) {
2026-01-16 17:03:34 +08:00
idStr := c.Param("id")
var id uint
if _, err := fmt.Sscanf(idStr, "%d", &id); err != nil {
utils.Error(c, 400, "Invalid role ID")
2026-01-15 13:51:44 +08:00
return
}
2026-01-16 17:03:34 +08:00
var role models.Role
if err := c.ShouldBindJSON(&role); err != nil {
utils.Error(c, 400, "Invalid request")
2026-01-15 13:51:44 +08:00
return
}
2026-01-16 17:03:34 +08:00
role.ID = id
2026-01-15 13:51:44 +08:00
if err := repositories.UpdateRole(&role); err != nil {
2026-01-16 17:03:34 +08:00
utils.ServerError(c, err)
2026-01-15 13:51:44 +08:00
return
}
2026-01-16 17:03:34 +08:00
utils.SuccessWithMsg(c, "Role updated successfully", nil)
2026-01-15 13:51:44 +08:00
}
2026-01-16 17:03:34 +08:00
// AdminDeleteRole 删除角色
2026-01-15 13:51:44 +08:00
func AdminDeleteRole(c *gin.Context) {
2026-01-16 17:03:34 +08:00
idStr := c.Param("id")
var id uint
if _, err := fmt.Sscanf(idStr, "%d", &id); err != nil {
utils.Error(c, 400, "Invalid role ID")
2026-01-15 13:51:44 +08:00
return
}
2026-01-16 17:03:34 +08:00
if err := repositories.DeleteRole(id); err != nil {
utils.ServerError(c, err)
2026-01-15 13:51:44 +08:00
return
}
2026-01-16 17:03:34 +08:00
utils.SuccessWithMsg(c, "Role deleted successfully", nil)
2026-01-15 13:51:44 +08:00
}
2026-01-16 17:03:34 +08:00
// AdminGetPermissions 获取所有权限
2026-01-15 13:51:44 +08:00
func AdminGetPermissions(c *gin.Context) {
permissions, err := repositories.GetPermissions()
if err != nil {
2026-01-16 17:03:34 +08:00
utils.ServerError(c, err)
2026-01-15 13:51:44 +08:00
return
}
2026-01-16 17:03:34 +08:00
if permissions == nil {
utils.Success(c, []interface{}{})
} else {
utils.Success(c, permissions)
}
2026-01-15 13:51:44 +08:00
}
// 更新角色权限请求结构
type UpdateRolePermissionsRequest struct {
PermissionIDs []uint `json:"permissionIds" binding:"required"`
}
// 更新角色的权限
func AdminUpdateRolePermissions(c *gin.Context) {
roleIDStr := c.Param("id")
// 转换角色ID
var roleID uint
id, err := strconv.ParseUint(roleIDStr, 10, 32)
if err != nil {
2026-01-16 17:03:34 +08:00
utils.Error(c, 400, "Invalid role ID")
2026-01-15 13:51:44 +08:00
return
}
roleID = uint(id)
// 绑定请求数据
var req UpdateRolePermissionsRequest
if err := c.ShouldBindJSON(&req); err != nil {
2026-01-16 17:03:34 +08:00
utils.Error(c, 400, "Invalid request format")
2026-01-15 13:51:44 +08:00
return
}
// 检查角色是否存在
role, err := repositories.GetRoleByID(roleID)
if err != nil {
2026-01-16 17:03:34 +08:00
utils.ServerError(c, err)
2026-01-15 13:51:44 +08:00
return
}
if role == nil {
2026-01-16 17:03:34 +08:00
utils.Error(c, 404, "Role not found")
2026-01-15 13:51:44 +08:00
return
}
// 更新权限
if err := repositories.AssignPermissionsToRole(roleID, req.PermissionIDs); err != nil {
2026-01-16 17:03:34 +08:00
utils.ServerError(c, err)
2026-01-15 13:51:44 +08:00
return
}
2026-01-16 17:03:34 +08:00
utils.SuccessWithMsg(c, "Role permissions updated successfully", nil)
2026-01-15 13:51:44 +08:00
}