196 lines
4.4 KiB
Go
196 lines
4.4 KiB
Go
package utils
|
|
|
|
import (
|
|
"github.com/flipped-aurora/gin-vue-admin/server/global"
|
|
"github.com/flipped-aurora/gin-vue-admin/server/model/system"
|
|
"github.com/flipped-aurora/gin-vue-admin/server/plugin/organization/model"
|
|
"github.com/flipped-aurora/gin-vue-admin/server/utils"
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
// uint 去重方法
|
|
func Uniq(array []uint) []uint {
|
|
var uintMap = make(map[uint]bool)
|
|
var res []uint
|
|
for _, u := range array {
|
|
if !uintMap[u] {
|
|
uintMap[u] = true
|
|
res = append(res, u)
|
|
}
|
|
}
|
|
return res
|
|
}
|
|
|
|
const (
|
|
Node = 0 // 无资源权限
|
|
Self = 1 // 仅自己
|
|
Current = 2 // 当前部门
|
|
Deep = 3 // 当前部门及以下
|
|
All = 4 // 所有
|
|
)
|
|
|
|
// 获取当前部门ID
|
|
func GetSelfOrg(id uint) []uint {
|
|
var orgUser []model.OrgUser
|
|
err := global.GVA_DB.Find(&orgUser, "sys_user_id = ?", id).Error
|
|
if err != nil {
|
|
return []uint{}
|
|
}
|
|
var orgId []uint
|
|
for _, m := range orgUser {
|
|
orgId = append(orgId, m.OrganizationID)
|
|
}
|
|
return Uniq(orgId)
|
|
}
|
|
|
|
// 获取所有部门
|
|
func GetAllOrg() []model.Organization {
|
|
var orgUser []model.Organization
|
|
err := global.GVA_DB.Find(&orgUser).Error
|
|
if err != nil {
|
|
return []model.Organization{}
|
|
}
|
|
return orgUser
|
|
}
|
|
|
|
// 获取所有部门ID
|
|
func GetAllOrgID() []uint {
|
|
orgUser := GetAllOrg()
|
|
if len(orgUser) == 0 {
|
|
return []uint{}
|
|
}
|
|
var orgids []uint
|
|
for _, organization := range orgUser {
|
|
orgids = append(orgids, organization.ID)
|
|
}
|
|
return Uniq(orgids)
|
|
}
|
|
|
|
// 获取当前部门及以下部门id
|
|
func GetDeepOrg(id uint) []uint {
|
|
orgId := GetSelfOrg(id)
|
|
if len(orgId) == 0 {
|
|
return []uint{}
|
|
}
|
|
orgs := GetAllOrg()
|
|
if len(orgs) == 0 {
|
|
return []uint{}
|
|
}
|
|
orgids := findChildren(orgId, orgs)
|
|
return Uniq(append(orgids, orgId...))
|
|
}
|
|
|
|
// 获取当前部门及以下部门的递归方法
|
|
func findChildren(ids []uint, orgs []model.Organization) []uint {
|
|
var idsMap = make(map[uint]bool)
|
|
var resIDs []uint
|
|
for _, id := range ids {
|
|
idsMap[id] = true
|
|
}
|
|
for _, org := range orgs {
|
|
if idsMap[org.ParentID] {
|
|
resIDs = append(resIDs, org.ID)
|
|
}
|
|
}
|
|
if len(resIDs) == 0 {
|
|
resIDs = append(resIDs, ids...)
|
|
return resIDs
|
|
}
|
|
dids := findChildren(resIDs, orgs)
|
|
resIDs = append(resIDs, ids...)
|
|
resIDs = append(resIDs, dids...)
|
|
return resIDs
|
|
}
|
|
|
|
// 获取当前部门的用户id
|
|
func GetCurrentUserIDs(id uint) []uint {
|
|
orgId := GetSelfOrg(id)
|
|
if len(orgId) == 0 {
|
|
return []uint{}
|
|
}
|
|
return GetUsersByOrgIds(orgId)
|
|
}
|
|
|
|
// 获取当前部门及以下的用户id
|
|
func GetDeepUserIDs(id uint) []uint {
|
|
orgids := GetDeepOrg(id)
|
|
if len(orgids) == 0 {
|
|
return []uint{}
|
|
}
|
|
return GetUsersByOrgIds(orgids)
|
|
}
|
|
|
|
// 根据部门获取部门下用户ID
|
|
func GetUsersByOrgIds(orgIds []uint) []uint {
|
|
var orgUser []model.OrgUser
|
|
err := global.GVA_DB.Find(&orgUser, "organization_id in (?)", orgIds).Error
|
|
if err != nil {
|
|
return []uint{}
|
|
}
|
|
var userIDS []uint
|
|
for _, m := range orgUser {
|
|
userIDS = append(userIDS, m.SysUserID)
|
|
}
|
|
return Uniq(userIDS)
|
|
}
|
|
|
|
// 获取所有用户ID
|
|
func GetAllUserIDs() []uint {
|
|
var users []system.SysUser
|
|
err := global.GVA_DB.Find(&users).Error
|
|
if err != nil {
|
|
return []uint{}
|
|
}
|
|
var usersID []uint
|
|
for _, sysUser := range users {
|
|
usersID = append(usersID, sysUser.ID)
|
|
}
|
|
return Uniq(usersID)
|
|
}
|
|
|
|
// 自动获取当前用户拥有的权限的用户ID
|
|
func GetUserIDS(c *gin.Context) []uint {
|
|
user := utils.GetUserInfo(c)
|
|
var data model.DataAuthority
|
|
err := global.GVA_DB.First(&data, "authority_id = ?", user.AuthorityId).Error
|
|
if err != nil {
|
|
return []uint{}
|
|
}
|
|
switch data.AuthorityType {
|
|
case Node:
|
|
return []uint{}
|
|
case Self:
|
|
return []uint{user.BaseClaims.ID}
|
|
case Current:
|
|
return GetCurrentUserIDs(user.BaseClaims.ID)
|
|
case Deep:
|
|
return GetDeepUserIDs(user.BaseClaims.ID)
|
|
case All:
|
|
return GetAllUserIDs()
|
|
}
|
|
return []uint{}
|
|
}
|
|
|
|
// 自动获取当前用户拥有的权限的部门ID
|
|
func GetOrgIDS(c *gin.Context) []uint {
|
|
user := utils.GetUserInfo(c)
|
|
var data model.DataAuthority
|
|
err := global.GVA_DB.First(&data, "authority_id = ?", user.AuthorityId).Error
|
|
if err != nil {
|
|
return []uint{}
|
|
}
|
|
switch data.AuthorityType {
|
|
case Node:
|
|
return []uint{}
|
|
case Self:
|
|
return GetSelfOrg(user.BaseClaims.ID)
|
|
case Current:
|
|
return GetSelfOrg(user.BaseClaims.ID)
|
|
case Deep:
|
|
return GetDeepOrg(user.BaseClaims.ID)
|
|
case All:
|
|
return GetAllOrgID()
|
|
}
|
|
return []uint{}
|
|
}
|