admin_backend/controller/permission.go
hahwu 9468ec5873 用户权限管理
Co-authored-by: Copilot <copilot@github.com>
2026-04-29 10:35:36 +08:00

367 lines
9.7 KiB
Go

package controller
import (
"backend/model"
"backend/util"
"github.com/gin-gonic/gin"
)
type permissionIDRequest struct {
ID int `json:"id" binding:"required"`
}
type groupRoleSetRequest struct {
GroupID int `json:"group_id" binding:"required"`
RoleIDs []int `json:"role_ids"`
}
type groupRoleListRequest struct {
GroupID int `json:"group_id" binding:"required"`
}
type rolePermissionSetRequest struct {
RoleID int `json:"role_id" binding:"required"`
PermissionIDs []int `json:"permission_ids"`
}
type rolePermissionListRequest struct {
RoleID int `json:"role_id" binding:"required"`
}
type userGroupListRequest struct {
AdminID int `json:"admin_id" binding:"required"`
}
type userGroupSetRequest struct {
AdminID int `json:"admin_id" binding:"required"`
GroupIDs []int `json:"group_ids"`
}
type userPermissionSetRequest struct {
AdminID int `json:"admin_id" binding:"required"`
Permissions []model.UserPermissionItem `json:"permissions"`
}
type userAdminIDRequest struct {
AdminID int `json:"admin_id" binding:"required"`
}
func PermissionUserGroupList(c *gin.Context) {
var req model.PermissionUserGroupListParams
if err := c.ShouldBindJSON(&req); err != nil {
failed(c, "Invalid input: "+err.Error())
return
}
items, total, err := model.ListPermissionUserGroups(req)
if err != nil {
failed(c, "Failed to list user groups: "+err.Error())
return
}
success(c, gin.H{"items": items, "total": total})
}
func PermissionUserGroupAdd(c *gin.Context) {
var req model.PermissionUserGroup
if err := c.ShouldBindJSON(&req); err != nil {
failed(c, "Invalid input: "+err.Error())
return
}
if req.GroupCode == "" || req.GroupName == "" {
failed(c, "group_code and group_name are required")
return
}
if err := model.CreatePermissionUserGroup(&req, c.GetString("admin")); err != nil {
failed(c, "Failed to add user group: "+err.Error())
return
}
util.AddAdminLog(c, "新增权限用户组", req)
success(c, req)
}
func PermissionUserGroupEdit(c *gin.Context) {
var req model.PermissionUserGroup
if err := c.ShouldBindJSON(&req); err != nil {
failed(c, "Invalid input: "+err.Error())
return
}
if req.ID <= 0 {
failed(c, "id is required")
return
}
if err := model.UpdatePermissionUserGroup(&req, c.GetString("admin")); err != nil {
failed(c, "Failed to edit user group: "+err.Error())
return
}
util.AddAdminLog(c, "编辑权限用户组", req)
success(c, req)
}
func PermissionUserGroupDelete(c *gin.Context) {
var req permissionIDRequest
if err := c.ShouldBindJSON(&req); err != nil {
failed(c, "Invalid input: "+err.Error())
return
}
if err := model.DeletePermissionUserGroup(req.ID); err != nil {
failed(c, "Failed to delete user group: "+err.Error())
return
}
util.AddAdminLog(c, "删除权限用户组", req)
success(c, gin.H{"id": req.ID})
}
func PermissionRoleList(c *gin.Context) {
var req model.PermissionRoleListParams
if err := c.ShouldBindJSON(&req); err != nil {
failed(c, "Invalid input: "+err.Error())
return
}
items, total, err := model.ListPermissionRoles(req)
if err != nil {
failed(c, "Failed to list roles: "+err.Error())
return
}
success(c, gin.H{"items": items, "total": total})
}
func PermissionRoleAdd(c *gin.Context) {
var req model.PermissionRole
if err := c.ShouldBindJSON(&req); err != nil {
failed(c, "Invalid input: "+err.Error())
return
}
if req.RoleCode == "" || req.RoleName == "" {
failed(c, "role_code and role_name are required")
return
}
if err := model.CreatePermissionRole(&req, c.GetString("admin")); err != nil {
failed(c, "Failed to add role: "+err.Error())
return
}
util.AddAdminLog(c, "新增权限角色", req)
success(c, req)
}
func PermissionRoleEdit(c *gin.Context) {
var req model.PermissionRole
if err := c.ShouldBindJSON(&req); err != nil {
failed(c, "Invalid input: "+err.Error())
return
}
if req.ID <= 0 {
failed(c, "id is required")
return
}
if err := model.UpdatePermissionRole(&req, c.GetString("admin")); err != nil {
failed(c, "Failed to edit role: "+err.Error())
return
}
util.AddAdminLog(c, "编辑权限角色", req)
success(c, req)
}
func PermissionRoleDelete(c *gin.Context) {
var req permissionIDRequest
if err := c.ShouldBindJSON(&req); err != nil {
failed(c, "Invalid input: "+err.Error())
return
}
if err := model.DeletePermissionRole(req.ID); err != nil {
failed(c, "Failed to delete role: "+err.Error())
return
}
util.AddAdminLog(c, "删除权限角色", req)
success(c, gin.H{"id": req.ID})
}
func PermissionGroupRoleSet(c *gin.Context) {
var req groupRoleSetRequest
if err := c.ShouldBindJSON(&req); err != nil {
failed(c, "Invalid input: "+err.Error())
return
}
if err := model.SetGroupRoles(req.GroupID, req.RoleIDs, c.GetString("admin")); err != nil {
failed(c, "Failed to set group roles: "+err.Error())
return
}
util.AddAdminLog(c, "设置用户组角色", req)
success(c, gin.H{"group_id": req.GroupID, "role_ids": req.RoleIDs})
}
func PermissionGroupRoleList(c *gin.Context) {
var req groupRoleListRequest
if err := c.ShouldBindJSON(&req); err != nil {
failed(c, "Invalid input: "+err.Error())
return
}
roles, err := model.ListGroupRoles(req.GroupID)
if err != nil {
failed(c, "Failed to list group roles: "+err.Error())
return
}
success(c, roles)
}
func PermissionPointList(c *gin.Context) {
var req model.PermissionPointListParams
if err := c.ShouldBindJSON(&req); err != nil {
failed(c, "Invalid input: "+err.Error())
return
}
items, total, err := model.ListPermissionPoints(req)
if err != nil {
failed(c, "Failed to list permissions: "+err.Error())
return
}
success(c, gin.H{"items": items, "total": total})
}
func PermissionPointAdd(c *gin.Context) {
var req model.PermissionPoint
if err := c.ShouldBindJSON(&req); err != nil {
failed(c, "Invalid input: "+err.Error())
return
}
if req.PermissionCode == "" || req.PermissionName == "" {
failed(c, "permission_code and permission_name are required")
return
}
if err := model.CreatePermissionPoint(&req, c.GetString("admin")); err != nil {
failed(c, "Failed to add permission: "+err.Error())
return
}
util.AddAdminLog(c, "新增单点权限", req)
success(c, req)
}
func PermissionPointEdit(c *gin.Context) {
var req model.PermissionPoint
if err := c.ShouldBindJSON(&req); err != nil {
failed(c, "Invalid input: "+err.Error())
return
}
if req.ID <= 0 {
failed(c, "id is required")
return
}
if err := model.UpdatePermissionPoint(&req, c.GetString("admin")); err != nil {
failed(c, "Failed to edit permission: "+err.Error())
return
}
util.AddAdminLog(c, "编辑单点权限", req)
success(c, req)
}
func PermissionPointDelete(c *gin.Context) {
var req permissionIDRequest
if err := c.ShouldBindJSON(&req); err != nil {
failed(c, "Invalid input: "+err.Error())
return
}
if err := model.DeletePermissionPoint(req.ID); err != nil {
failed(c, "Failed to delete permission: "+err.Error())
return
}
util.AddAdminLog(c, "删除单点权限", req)
success(c, gin.H{"id": req.ID})
}
func PermissionRolePermissionSet(c *gin.Context) {
var req rolePermissionSetRequest
if err := c.ShouldBindJSON(&req); err != nil {
failed(c, "Invalid input: "+err.Error())
return
}
if err := model.SetRolePermissions(req.RoleID, req.PermissionIDs, c.GetString("admin")); err != nil {
failed(c, "Failed to set role permissions: "+err.Error())
return
}
util.AddAdminLog(c, "设置角色权限", req)
success(c, gin.H{"role_id": req.RoleID, "permission_ids": req.PermissionIDs})
}
func PermissionRolePermissionList(c *gin.Context) {
var req rolePermissionListRequest
if err := c.ShouldBindJSON(&req); err != nil {
failed(c, "Invalid input: "+err.Error())
return
}
permissions, err := model.ListRolePermissions(req.RoleID)
if err != nil {
failed(c, "Failed to list role permissions: "+err.Error())
return
}
success(c, permissions)
}
func PermissionUserGroupRelList(c *gin.Context) {
var req userGroupListRequest
if err := c.ShouldBindJSON(&req); err != nil {
failed(c, "Invalid input: "+err.Error())
return
}
groups, err := model.ListUserGroups(req.AdminID)
if err != nil {
failed(c, "Failed to list user groups: "+err.Error())
return
}
success(c, groups)
}
func PermissionUserGroupRelSet(c *gin.Context) {
var req userGroupSetRequest
if err := c.ShouldBindJSON(&req); err != nil {
failed(c, "Invalid input: "+err.Error())
return
}
if err := model.SetUserGroups(req.AdminID, req.GroupIDs, c.GetString("admin")); err != nil {
failed(c, "Failed to set user groups: "+err.Error())
return
}
util.AddAdminLog(c, "设置管理员用户组", req)
success(c, gin.H{"admin_id": req.AdminID, "group_ids": req.GroupIDs})
}
func PermissionUserPermissionList(c *gin.Context) {
var req userAdminIDRequest
if err := c.ShouldBindJSON(&req); err != nil {
failed(c, "Invalid input: "+err.Error())
return
}
items, err := model.ListUserPermissions(req.AdminID)
if err != nil {
failed(c, "Failed to list user permissions: "+err.Error())
return
}
success(c, items)
}
func PermissionUserPermissionSet(c *gin.Context) {
var req userPermissionSetRequest
if err := c.ShouldBindJSON(&req); err != nil {
failed(c, "Invalid input: "+err.Error())
return
}
if err := model.SetUserPermissions(req.AdminID, req.Permissions, c.GetString("admin")); err != nil {
failed(c, "Failed to set user permissions: "+err.Error())
return
}
util.AddAdminLog(c, "设置管理员单点权限", req)
success(c, gin.H{"admin_id": req.AdminID, "permissions": req.Permissions})
}
func PermissionUserRoleList(c *gin.Context) {
var req userAdminIDRequest
if err := c.ShouldBindJSON(&req); err != nil {
failed(c, "Invalid input: "+err.Error())
return
}
roles, err := model.ListUserRoles(req.AdminID)
if err != nil {
failed(c, "Failed to list user roles: "+err.Error())
return
}
success(c, roles)
}