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
|
|
|
}
|