|
@@ -21,12 +21,19 @@ const (
|
|
|
UserEntIdKey = "jy_userentid_%s_%d_%s"
|
|
|
)
|
|
|
|
|
|
+type UserInfo struct {
|
|
|
+ Capitals map[string]int
|
|
|
+ Permissions map[string]int
|
|
|
+ Lock *sync.Mutex
|
|
|
+}
|
|
|
+
|
|
|
var (
|
|
|
CapitalRetention = "capital_retention"
|
|
|
- UserCapitals = map[string]map[string]int{}
|
|
|
- UserPermissions = map[string]map[string]int{}
|
|
|
- UserLock = map[string]*sync.Mutex{}
|
|
|
- OverallLock = &sync.Mutex{}
|
|
|
+ //UserCapitals = map[string]map[string]int{}
|
|
|
+ //UserPermissions = map[string]map[string]int{}
|
|
|
+ //UserLock = map[string]*sync.Mutex{}
|
|
|
+ OverallLock = &sync.Mutex{}
|
|
|
+ UserInfoMap = map[string]*UserInfo{}
|
|
|
)
|
|
|
|
|
|
/*
|
|
@@ -198,15 +205,17 @@ func UserRolePowerInit(strs []string) {
|
|
|
//
|
|
|
func CheckCapitalResources(menu *JYMenu, baseUserId, appId string, entId, entUserId int64, b bool) (title, content, confirmUrl, confirmText, appType, openType string, isShowCancel, usable bool) {
|
|
|
OverallLock.Lock()
|
|
|
- if UserCapitals[baseUserId] == nil {
|
|
|
- UserCapitals[baseUserId] = map[string]int{}
|
|
|
- }
|
|
|
- if UserPermissions[baseUserId] == nil {
|
|
|
- UserPermissions[baseUserId] = map[string]int{}
|
|
|
+ userInfo := UserInfoMap[baseUserId]
|
|
|
+ if userInfo == nil {
|
|
|
+ userInfo = &UserInfo{}
|
|
|
+ userInfo.Lock = &sync.Mutex{}
|
|
|
+ userInfo.Capitals = map[string]int{}
|
|
|
+ userInfo.Permissions = map[string]int{}
|
|
|
+ UserInfoMap[baseUserId] = userInfo
|
|
|
}
|
|
|
- UserLock[baseUserId] = &sync.Mutex{}
|
|
|
OverallLock.Unlock()
|
|
|
- UserLock[baseUserId].Lock()
|
|
|
+ userInfo.Lock.Lock()
|
|
|
+ defer userInfo.Lock.Unlock()
|
|
|
var (
|
|
|
capitalBool = false
|
|
|
permissionBool = false
|
|
@@ -215,15 +224,14 @@ func CheckCapitalResources(menu *JYMenu, baseUserId, appId string, entId, entUse
|
|
|
if menu.CapitalCode != "" {
|
|
|
capitalBool = false
|
|
|
for _, cv := range strings.Split(menu.CapitalCode, ",") {
|
|
|
- userCapital := UserCapitals[baseUserId]
|
|
|
- if userCapital[cv] == 0 {
|
|
|
+ if userInfo.Capitals[cv] == 0 {
|
|
|
if c := BaseMysql.CountBySql(`SELECT COUNT(id) FROM `+CapitalRetention+` WHERE source = ? AND user_id = ? AND appid = ?`, cv, baseUserId, appId); c > 0 {
|
|
|
- userCapital[cv] = 1
|
|
|
+ userInfo.Capitals[cv] = 1
|
|
|
} else {
|
|
|
- userCapital[cv] = -1
|
|
|
+ userInfo.Capitals[cv] = -1
|
|
|
}
|
|
|
}
|
|
|
- if userCapital[cv] < 0 {
|
|
|
+ if userInfo.Capitals[cv] < 0 {
|
|
|
//留资弹窗信息
|
|
|
title = menu.CapitalInfo.Title
|
|
|
content = menu.CapitalInfo.Content
|
|
@@ -248,17 +256,16 @@ func CheckCapitalResources(menu *JYMenu, baseUserId, appId string, entId, entUse
|
|
|
permissionBool = false
|
|
|
if menu.CapitalCode != "" && capitalBool {
|
|
|
for _, pv := range strings.Split(menu.PermissionCode, ",") {
|
|
|
- userPermission := UserPermissions[baseUserId]
|
|
|
- if userPermission[pv] == 0 {
|
|
|
- userPermission[pv] = -1
|
|
|
+ if userInfo.Permissions[pv] == 0 {
|
|
|
+ userInfo.Permissions[pv] = -1
|
|
|
powerList := GetResources(appId, baseUserId, entId, entUserId)
|
|
|
if len(powerList) > 0 {
|
|
|
for _, plv := range powerList {
|
|
|
- userPermission[plv] = 1
|
|
|
+ userInfo.Permissions[plv] = 1
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- if userPermission[pv] < 0 {
|
|
|
+ if userInfo.Permissions[pv] < 0 {
|
|
|
//自定义弹窗
|
|
|
title = menu.AdditionalInfo.Title
|
|
|
content = menu.AdditionalInfo.Content
|
|
@@ -279,6 +286,5 @@ func CheckCapitalResources(menu *JYMenu, baseUserId, appId string, entId, entUse
|
|
|
}
|
|
|
}
|
|
|
usable = capitalBool && permissionBool
|
|
|
- UserLock[baseUserId].Unlock()
|
|
|
return
|
|
|
}
|