mirror of
https://gitee.com/XM-GO/PandaX.git
synced 2026-04-23 10:58:35 +08:00
169 lines
5.2 KiB
Go
169 lines
5.2 KiB
Go
package api
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
entity "pandax/apps/system/entity"
|
|
services "pandax/apps/system/services"
|
|
"pandax/kit/biz"
|
|
"pandax/kit/casbin"
|
|
"pandax/kit/model"
|
|
"pandax/kit/restfulx"
|
|
"pandax/kit/utils"
|
|
"pandax/pkg/global"
|
|
)
|
|
|
|
type RoleApi struct {
|
|
RoleApp services.SysRoleModel
|
|
UserApp services.SysUserModel
|
|
RoleMenuApp services.SysRoleMenuModel
|
|
OrganizationApp services.SysOrganizationModel
|
|
RoleOrganizationApp services.SysRoleOrganizationModel
|
|
}
|
|
|
|
// GetRoleList角色列表数据
|
|
func (r *RoleApi) GetRoleList(rc *restfulx.ReqCtx) {
|
|
pageNum := restfulx.QueryInt(rc, "pageNum", 1)
|
|
pageSize := restfulx.QueryInt(rc, "pageSize", 10)
|
|
status := restfulx.QueryParam(rc, "status")
|
|
roleName := restfulx.QueryParam(rc, "roleName")
|
|
roleKey := restfulx.QueryParam(rc, "roleKey")
|
|
role := entity.SysRole{Status: status, RoleName: roleName, RoleKey: roleKey}
|
|
list, total := r.RoleApp.FindListPage(pageNum, pageSize, role)
|
|
|
|
rc.ResData = model.ResultPage{
|
|
Total: total,
|
|
PageNum: int64(pageNum),
|
|
PageSize: int64(pageSize),
|
|
Data: list,
|
|
}
|
|
}
|
|
|
|
// GetRole 获取Role数据
|
|
func (r *RoleApi) GetRole(rc *restfulx.ReqCtx) {
|
|
roleId := restfulx.PathParamInt(rc, "roleId")
|
|
role := r.RoleApp.FindOne(int64(roleId))
|
|
role.MenuIds = r.RoleApp.GetRoleMeunId(entity.SysRole{RoleId: int64(roleId)})
|
|
|
|
rc.ResData = role
|
|
}
|
|
|
|
// InsertRole 创建角色
|
|
func (r *RoleApi) InsertRole(rc *restfulx.ReqCtx) {
|
|
var role entity.SysRole
|
|
restfulx.BindJsonAndValid(rc, &role)
|
|
role.CreateBy = rc.LoginAccount.UserName
|
|
if role.DataScope == "" {
|
|
role.DataScope = "0"
|
|
}
|
|
// 添加角色对应的菜单
|
|
insert := r.RoleApp.Insert(role)
|
|
role.RoleId = insert.RoleId
|
|
r.RoleMenuApp.Insert(insert.RoleId, role.MenuIds)
|
|
//添加权限
|
|
ca := casbin.CasbinService{ModelPath: global.Conf.Casbin.ModelPath}
|
|
ca.UpdateCasbin(role.RoleKey, role.ApiIds)
|
|
}
|
|
|
|
// UpdateRole 修改用户角色
|
|
func (r *RoleApi) UpdateRole(rc *restfulx.ReqCtx) {
|
|
var role entity.SysRole
|
|
restfulx.BindJsonAndValid(rc, &role)
|
|
role.UpdateBy = rc.LoginAccount.UserName
|
|
// 修改角色
|
|
r.RoleApp.Update(role)
|
|
// 删除角色的菜单绑定
|
|
r.RoleMenuApp.DeleteRoleMenu(role.RoleId)
|
|
// 添加角色菜单绑定
|
|
r.RoleMenuApp.Insert(role.RoleId, role.MenuIds)
|
|
//修改api权限
|
|
ca := casbin.CasbinService{ModelPath: global.Conf.Casbin.ModelPath}
|
|
ca.UpdateCasbin(role.RoleKey, role.ApiIds)
|
|
}
|
|
|
|
// UpdateRoleStatus 修改用户角色状态
|
|
func (r *RoleApi) UpdateRoleStatus(rc *restfulx.ReqCtx) {
|
|
var role entity.SysRole
|
|
restfulx.BindJsonAndValid(rc, &role)
|
|
role.UpdateBy = rc.LoginAccount.UserName
|
|
// 修改角色
|
|
r.RoleApp.Update(role)
|
|
}
|
|
|
|
// UpdateRoleDataScope 修改用户角色组织
|
|
func (r *RoleApi) UpdateRoleDataScope(rc *restfulx.ReqCtx) {
|
|
var role entity.SysRole
|
|
restfulx.BindJsonAndValid(rc, &role)
|
|
role.UpdateBy = rc.LoginAccount.UserName
|
|
// 修改角色
|
|
update := r.RoleApp.Update(role)
|
|
go func() {
|
|
if role.DataScope != entity.SELFDATASCOPE {
|
|
organizationIds := make([]int64, 0)
|
|
if role.DataScope == entity.ALLDATASCOPE {
|
|
for _, organization := range *r.OrganizationApp.FindList(entity.SysOrganization{}) {
|
|
organizationIds = append(organizationIds, organization.OrganizationId)
|
|
}
|
|
}
|
|
if role.DataScope == entity.DIYDATASCOPE {
|
|
organizationIds = role.OrganizationIds
|
|
}
|
|
if role.DataScope == entity.ORGDATASCOPE {
|
|
organizationIds = append(organizationIds, rc.LoginAccount.OrganizationId)
|
|
}
|
|
if role.DataScope == entity.ORGALLDATASCOPE {
|
|
//organizationIds = append(organizationIds, rc.LoginAccount.OrganizationId)
|
|
organizationIds = r.OrganizationApp.SelectOrganizationIds(entity.SysOrganization{OrganizationId: rc.LoginAccount.OrganizationId})
|
|
}
|
|
// 删除角色的组织绑定
|
|
r.RoleOrganizationApp.Delete(entity.SysRoleOrganization{RoleId: update.RoleId})
|
|
// 添加角色组织绑定
|
|
r.RoleOrganizationApp.Insert(role.RoleId, organizationIds)
|
|
}
|
|
}()
|
|
|
|
}
|
|
|
|
// DeleteRole 删除用户角色
|
|
func (r *RoleApi) DeleteRole(rc *restfulx.ReqCtx) {
|
|
roleId := restfulx.PathParam(rc, "roleId")
|
|
roleIds := utils.IdsStrToIdsIntGroup(roleId)
|
|
|
|
user := entity.SysUser{}
|
|
delList := make([]int64, 0)
|
|
// 判断角色下面是否绑定用户
|
|
for _, rid := range roleIds {
|
|
user.RoleId = rid
|
|
role := r.RoleApp.FindOne(rid)
|
|
list := r.UserApp.FindList(user)
|
|
if len(*list) == 0 {
|
|
delList = append(delList, rid)
|
|
//删除角色绑定api
|
|
ca := casbin.CasbinService{ModelPath: global.Conf.Casbin.ModelPath}
|
|
ca.ClearCasbin(0, role.RoleKey)
|
|
} else {
|
|
global.Log.Info(fmt.Sprintf("role:%d 存在用户无法删除", rid))
|
|
}
|
|
}
|
|
if len(delList) == 0 {
|
|
biz.ErrIsNil(errors.New("所有角色都已绑定用户无法删除"), "所有角色都已绑定用户,无法删除")
|
|
}
|
|
r.RoleApp.Delete(delList)
|
|
r.RoleMenuApp.DeleteRoleMenus(delList)
|
|
}
|
|
|
|
// ExportRole 导出角色
|
|
func (p *RoleApi) ExportRole(rc *restfulx.ReqCtx) {
|
|
filename := restfulx.QueryParam(rc, "filename")
|
|
status := restfulx.QueryParam(rc, "status")
|
|
roleName := restfulx.QueryParam(rc, "roleName")
|
|
roleKey := restfulx.QueryParam(rc, "roleKey")
|
|
role := entity.SysRole{Status: status, RoleName: roleName, RoleKey: roleKey}
|
|
|
|
list := p.RoleApp.FindList(role)
|
|
|
|
fileName := utils.GetFileName(global.Conf.Server.ExcelDir, filename)
|
|
utils.InterfaceToExcel(*list, fileName)
|
|
rc.Download(fileName)
|
|
}
|