package overallhandle
import (
"fmt"
"hr_server/grocerystore"
"hr_server/models"
"hr_server/models/modelssystempermission"
"hr_server/overall"
"strconv"
"strings"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
)
/ *
*
@ 作者 : 秦东
@ 时间 : 2024 - 03 - 0 8 13 : 38 : 51
@ 功能 : 人员操作记录
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func WritePeopleLog ( c * gin . Context , class string , errmsg ... any ) {
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2022 - 11 - 19 15 : 03 : 42
@ 功能 : 获取系统授权
@ 参数
# roleId 角色ID
# systemName 系统名称
# userKey 人员识别码
# orgId 行政组织
# postId 岗位
@ 返回值
# roleName 角色名称
# pointId 菜单权限
# operation 操作权限
# level 操作等级
@ 方法原型
# func GetNewAccredit ( systemName , roleId string , userKey , orgId , postId int64 ) ( roleName , pointId , operation string , level int )
* /
func GetNewAccredit ( systemName , roleId string , userKey , orgId , postId int64 ) ( roleName , pointId , operation string , level int ) {
redisFileKey := fmt . Sprintf ( "Licence:PowerLoginApi_%v_%v_%v_%v" , systemName , userKey , orgId , postId )
redisClient := grocerystore . RunRedis ( overall . CONSTANT_REDIS3 )
userRedisToken , isTrue := redisClient . HashGetAll ( redisFileKey )
if isTrue == false {
var pointIdAry [ ] string
var operationAry [ ] string
if roleId != "" {
roleIdAry := strings . Split ( roleId , "," )
var roleCont [ ] modelssystempermission . SystemRole
if len ( roleIdAry ) > 0 {
err := overall . CONSTANT_DB_Master . Model ( & modelssystempermission . SystemRole { } ) . Select ( "`name`" ) . Where ( "`id` IN ?" , roleIdAry ) . Find ( & roleCont ) . Error
if err == nil && len ( roleCont ) > 0 {
var roleNameAry [ ] string
for _ , rnv := range roleCont {
if IsInTrue [ string ] ( rnv . Name , roleNameAry ) == false {
roleNameAry = append ( roleNameAry , rnv . Name )
}
}
roleName = strings . Join ( roleNameAry , "|" )
}
//获取配置的所有角色权限
var roleEmpowerCont [ ] modelssystempermission . RoleEmpower
err = overall . CONSTANT_DB_System_Permission . Model ( & modelssystempermission . RoleEmpower { } ) . Select ( "`point_id`,`operation`,`level`" ) . Where ( "`system` = ? AND `role_id` IN ?" , systemName , roleIdAry ) . Find ( & roleEmpowerCont ) . Error
if err == nil && len ( roleEmpowerCont ) > 0 {
for _ , rev := range roleEmpowerCont {
menuList := strings . Split ( rev . PointId , "," )
for _ , mv := range menuList { //菜单权限
if mv != "" && IsInTrue [ string ] ( mv , pointIdAry ) == false {
pointIdAry = append ( pointIdAry , mv )
}
}
operList := strings . Split ( rev . Operation , "," )
for _ , ov := range operList { //操作权限
if ov != "" && IsInTrue [ string ] ( ov , operationAry ) == false {
operationAry = append ( operationAry , ov )
}
}
if level < rev . Level {
level = rev . Level //等级
}
}
}
}
}
//获取行政组织授权
if orgId > 0 && postId > 0 {
var orgEmpowerCont modelssystempermission . Empower
orgEmpowerCont . GetCont ( map [ string ] interface { } { "`ordid`" : orgId , "`post_id`" : postId , "`system`" : systemName } , "`point_id`" , "`operation`" , "`level`" )
if len ( pointIdAry ) < 1 { //判断是否已经配过权限
pointIdAry = strings . Split ( orgEmpowerCont . PointId , "," )
} else {
guoduPoin := strings . Split ( orgEmpowerCont . PointId , "," )
for _ , pv := range guoduPoin { //合并权限
if pv != "" && IsInTrue [ string ] ( pv , pointIdAry ) == false {
pointIdAry = append ( pointIdAry , pv )
}
}
}
if len ( operationAry ) < 1 { //判断是否已经配过权限
operationAry = strings . Split ( orgEmpowerCont . Operation , "," )
} else {
guoduOper := strings . Split ( orgEmpowerCont . Operation , "," )
for _ , gpv := range guoduOper { //合并权限
if gpv != "" && IsInTrue [ string ] ( gpv , operationAry ) == false {
operationAry = append ( operationAry , gpv )
}
}
}
if level < orgEmpowerCont . Level {
level = orgEmpowerCont . Level
}
}
pointId = strings . Join ( pointIdAry , "," )
operation = strings . Join ( operationAry , "," )
var powerCont EmpowerCont
powerCont . RoleName = roleName
powerCont . PointId = pointId
powerCont . Operation = operation
powerCont . Level = level
//组转写入redis
myContRedis := MapOut ( )
myContRedis [ "roleName" ] = roleName
myContRedis [ "pointid" ] = pointId
myContRedis [ "operation" ] = operation
myContRedis [ "level" ] = level
redisClient . SetRedisTime ( 10800 )
redisClient . HashMsetAdd ( redisFileKey , myContRedis )
} else {
roleName = userRedisToken [ "roleName" ]
pointId = userRedisToken [ "pointid" ]
operation = userRedisToken [ "operation" ]
level , _ = strconv . Atoi ( userRedisToken [ "level" ] )
//组转写入redis
writeRedisData := MapOut ( )
for i , v := range userRedisToken {
writeRedisData [ i ] = v
}
redisClient . SetRedisTime ( 10800 )
redisClient . HashMsetAdd ( redisFileKey , writeRedisData )
}
return
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2025 - 05 - 21 0 8 : 44 : 35
@ 功能 : 获取用户权限
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( g * GainUserPower ) GetUserPower ( ) ( powerInfo SendUserPower ) {
//正常系统权限配置
orgLook := [ ] int64 { }
if g . RoleId != "" {
roleAry := strings . Split ( g . RoleId , "," )
fmt . Printf ( "\n\n\n角色----------->%v----------->%v\n\n\n" , roleAry , len ( roleAry ) > 0 )
if len ( roleAry ) > 0 {
var rolePowerList [ ] modelssystempermission . RoleEmpower
overall . CONSTANT_DB_System_Permission . Model ( & modelssystempermission . RoleEmpower { } ) . Where ( "`state` = 1 AND `system` = ? AND `role_id` IN ?" , g . SystemName , roleAry ) . Find ( & rolePowerList )
for _ , v := range rolePowerList {
if v . Level >= powerInfo . System . Level {
powerInfo . System . Level = v . Level
}
if v . PointId != "" {
pointIdAry := strings . Split ( v . PointId , "," )
for _ , pv := range pointIdAry {
if ! IsInTrue [ string ] ( pv , powerInfo . System . PointId ) {
powerInfo . System . PointId = append ( powerInfo . System . PointId , pv )
}
}
}
if v . Operation != "" {
operationAry := strings . Split ( v . Operation , "," )
for _ , ov := range operationAry {
if ! IsInTrue [ string ] ( ov , powerInfo . System . Operation ) {
powerInfo . System . Operation = append ( powerInfo . System . Operation , ov )
}
}
}
if v . Organization != "" {
orgtionAry := strings . Split ( v . Organization , "," )
for _ , pv := range orgtionAry {
pvInt , _ := strconv . ParseInt ( pv , 10 , 64 )
if ! IsInTrue [ int64 ] ( pvInt , orgLook ) {
orgLook = append ( orgLook , pvInt )
}
}
}
}
}
}
fmt . Printf ( "\n\n\n角色权限----------->%v\n\n\n" , powerInfo . System . Level )
if g . PostId != 0 && g . OrgId != 0 {
var postPower modelssystempermission . Empower
postPower . GetCont ( map [ string ] interface { } { "`state`" : 1 , "`ordid`" : g . OrgId , "`post_id`" : g . PostId , "`system`" : g . SystemName } )
if postPower . Level >= powerInfo . System . Level {
powerInfo . System . Level = postPower . Level
}
if postPower . PointId != "" {
pointIdAry := strings . Split ( postPower . PointId , "," )
for _ , pv := range pointIdAry {
if ! IsInTrue [ string ] ( pv , powerInfo . System . PointId ) {
powerInfo . System . PointId = append ( powerInfo . System . PointId , pv )
}
}
}
if postPower . Operation != "" {
operationAry := strings . Split ( postPower . Operation , "," )
for _ , ov := range operationAry {
if ! IsInTrue [ string ] ( ov , powerInfo . System . Operation ) {
powerInfo . System . Operation = append ( powerInfo . System . Operation , ov )
}
}
}
if postPower . Organization != "" {
orgtionAry := strings . Split ( postPower . Organization , "," )
for _ , pv := range orgtionAry {
pvInt , _ := strconv . ParseInt ( pv , 10 , 64 )
if ! IsInTrue [ int64 ] ( pvInt , orgLook ) {
orgLook = append ( orgLook , pvInt )
}
}
}
}
fmt . Printf ( "\n\n\n职务权限----------->%v\n\n\n" , powerInfo . System . Level )
_ , companyId , departmentId , _ , workShopId := GetOrgStructure ( g . OrgId )
switch powerInfo . System . Level {
case 1 :
powerInfo . System . OrgList = [ ] int64 { }
var sunOrg GetOrgAllParent
sunOrg . GetGCSOrgSonAllId ( workShopId )
sunOrg . Id = append ( sunOrg . Id , workShopId )
powerInfo . System . OrgList = append ( powerInfo . System . OrgList , sunOrg . Id ... )
case 2 :
powerInfo . System . OrgList = [ ] int64 { }
var sunOrgDepart GetOrgAllParent
sunOrgDepart . GetGCSOrgSonAllId ( departmentId )
sunOrgDepart . Id = append ( sunOrgDepart . Id , departmentId )
powerInfo . System . OrgList = append ( powerInfo . System . OrgList , sunOrgDepart . Id ... )
case 3 :
powerInfo . System . OrgList = [ ] int64 { }
var sunOrgCompan GetOrgAllParent
sunOrgCompan . GetGCSOrgSonAllId ( companyId )
sunOrgCompan . Id = append ( sunOrgCompan . Id , companyId )
powerInfo . System . OrgList = append ( powerInfo . System . OrgList , sunOrgCompan . Id ... )
case 4 :
powerInfo . System . OrgList = orgLook
case 5 :
powerInfo . System . OrgList = [ ] int64 { }
default :
}
//低代码权限系统配置
if g . RoleId != "" {
orgLookApp := [ ] int64 { }
roleAry := strings . Split ( g . RoleId , "," )
if len ( roleAry ) > 0 {
var tablePower [ ] modelssystempermission . CustomTableAuthorize
overall . CONSTANT_DB_System_Permission . Model ( & modelssystempermission . CustomTableAuthorize { } ) . Where ( "`app_sign_code` = ? AND `table_sign_code` = ? AND `role_id` IN ?" , g . AppKey , g . TableId , roleAry ) . Find ( & tablePower )
for _ , v := range tablePower {
if v . PowerLerver >= powerInfo . System . Level {
powerInfo . AppSystem . Level = v . PowerLerver
}
if v . TablePower != "" {
tableAry := strings . Split ( v . TablePower , "," )
for _ , tv := range tableAry {
if ! IsInTrue [ string ] ( tv , powerInfo . AppSystem . PointId ) {
powerInfo . AppSystem . PointId = append ( powerInfo . AppSystem . PointId , tv )
}
}
}
if v . ListPower != "" {
listAry := strings . Split ( v . ListPower , "," )
for _ , lv := range listAry {
if ! IsInTrue [ string ] ( lv , powerInfo . AppSystem . Operation ) {
powerInfo . AppSystem . Operation = append ( powerInfo . AppSystem . Operation , lv )
}
}
}
if v . Organization != "" {
orgtionAry := strings . Split ( v . Organization , "," )
for _ , pv := range orgtionAry {
pvInt , _ := strconv . ParseInt ( pv , 10 , 64 )
if ! IsInTrue [ int64 ] ( pvInt , orgLookApp ) {
orgLookApp = append ( orgLookApp , pvInt )
}
}
}
}
switch powerInfo . AppSystem . Level {
case 2 :
powerInfo . AppSystem . OrgList = [ ] int64 { }
var sunOrg GetOrgAllParent
sunOrg . GetGCSOrgSonAllId ( workShopId )
sunOrg . Id = append ( sunOrg . Id , workShopId )
powerInfo . AppSystem . OrgList = append ( powerInfo . AppSystem . OrgList , sunOrg . Id ... )
case 3 :
powerInfo . AppSystem . OrgList = [ ] int64 { }
var sunOrgDepart GetOrgAllParent
sunOrgDepart . GetGCSOrgSonAllId ( departmentId )
sunOrgDepart . Id = append ( sunOrgDepart . Id , departmentId )
powerInfo . AppSystem . OrgList = append ( powerInfo . AppSystem . OrgList , sunOrgDepart . Id ... )
case 4 :
powerInfo . AppSystem . OrgList = [ ] int64 { }
var sunOrgCompan GetOrgAllParent
sunOrgCompan . GetGCSOrgSonAllId ( companyId )
sunOrgCompan . Id = append ( sunOrgCompan . Id , companyId )
powerInfo . AppSystem . OrgList = append ( powerInfo . AppSystem . OrgList , sunOrgCompan . Id ... )
case 5 :
powerInfo . AppSystem . OrgList = orgLookApp
case 6 :
powerInfo . AppSystem . OrgList = [ ] int64 { }
default :
}
}
}
return
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2025 - 05 - 22 13 : 53 : 17
@ 功能 : 权限结构查询语句
@ 参数
授权范围等级 ( 1 : 本人 ; 2 : 本岗位 ; 3 : 本部门 ; 4 : 本分部 ; 5 : 指定行政组织 ; 6 : 所有 )
#
@ 返回值
#
@ 方法原型
#
* /
func ( g * GainUserPower ) MakeSearchSql ( gormDb * gorm . DB , userCont models . ManCont , isOdeb string ) * gorm . DB {
powerInfo := g . GetUserPower ( )
fmt . Printf ( "\n\n\n等级-----%v------->%v\n\n\n" , powerInfo . System . Level , g )
if isOdeb == "yes" {
switch powerInfo . AppSystem . Level {
case 2 , 3 , 4 :
if len ( powerInfo . AppSystem . OrgList ) > 0 {
gormDb = gormDb . Where ( "`admin_org` IN ?" , powerInfo . AppSystem . OrgList )
} else {
if userCont . Key != 0 {
gormDb = gormDb . Where ( "`key` = ?" , userCont . Key )
}
}
case 6 :
default :
if userCont . Key != 0 {
gormDb = gormDb . Where ( "`key` = ?" , userCont . Key )
}
}
} else {
switch powerInfo . System . Level {
case 1 , 2 , 3 , 4 :
if len ( powerInfo . AppSystem . OrgList ) > 0 {
gormDb = gormDb . Where ( "`admin_org` IN ?" , powerInfo . AppSystem . OrgList )
} else {
if userCont . Key != 0 {
gormDb = gormDb . Where ( "`key` = ?" , userCont . Key )
}
}
case 5 :
default :
if userCont . Key != 0 {
gormDb = gormDb . Where ( "`key` = ?" , userCont . Key )
}
}
}
return gormDb
}