diff --git a/setting/user_usable_group.go b/setting/user_usable_group.go index fdf2f723..0ae132d0 100644 --- a/setting/user_usable_group.go +++ b/setting/user_usable_group.go @@ -3,14 +3,19 @@ package setting import ( "encoding/json" "one-api/common" + "sync" ) var userUsableGroups = map[string]string{ "default": "默认分组", "vip": "vip分组", } +var userUsableGroupsMutex sync.RWMutex func GetUserUsableGroupsCopy() map[string]string { + userUsableGroupsMutex.RLock() + defer userUsableGroupsMutex.RUnlock() + copyUserUsableGroups := make(map[string]string) for k, v := range userUsableGroups { copyUserUsableGroups[k] = v @@ -19,6 +24,9 @@ func GetUserUsableGroupsCopy() map[string]string { } func UserUsableGroups2JSONString() string { + userUsableGroupsMutex.RLock() + defer userUsableGroupsMutex.RUnlock() + jsonBytes, err := json.Marshal(userUsableGroups) if err != nil { common.SysError("error marshalling user groups: " + err.Error()) @@ -27,6 +35,9 @@ func UserUsableGroups2JSONString() string { } func UpdateUserUsableGroupsByJSONString(jsonStr string) error { + userUsableGroupsMutex.Lock() + defer userUsableGroupsMutex.Unlock() + userUsableGroups = make(map[string]string) return json.Unmarshal([]byte(jsonStr), &userUsableGroups) } @@ -47,11 +58,17 @@ func GetUserUsableGroups(userGroup string) map[string]string { } func GroupInUserUsableGroups(groupName string) bool { + userUsableGroupsMutex.RLock() + defer userUsableGroupsMutex.RUnlock() + _, ok := userUsableGroups[groupName] return ok } func GetUsableGroupDescription(groupName string) string { + userUsableGroupsMutex.RLock() + defer userUsableGroupsMutex.RUnlock() + if desc, ok := userUsableGroups[groupName]; ok { return desc }