From 120e4ee92f412f5acde38664a785ef542d77456c Mon Sep 17 00:00:00 2001 From: KamiPasi <92498495+KamiPasi@users.noreply.github.com> Date: Sun, 13 Jul 2025 01:03:56 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20refactor(user=5Fusable=5Fgroup):?= =?UTF-8?q?=20enhance=20concurrency=20control=20with=20mutex=20for=20user?= =?UTF-8?q?=20groups=20management?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- setting/user_usable_group.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) 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 }