Bläddra i källkod

refactor: improve user group handling and add GetUserUsableGroups function

- Introduced a new function `GetUserUsableGroupsCopy` to return a copy of user usable groups.
- Updated `GetUserUsableGroups` to utilize the new function for better encapsulation.
- Changed variable names from `UserUsableGroups` to `userUsableGroups` for consistency.
- Enhanced `GetUserUsableGroups` logic to ensure it returns a copy of the groups, preventing unintended modifications.
CalciumIon 1 år sedan
förälder
incheckning
77861e6440
2 ändrade filer med 24 tillägg och 15 borttagningar
  1. 6 1
      controller/user.go
  2. 18 14
      setting/user_usable_group.go

+ 6 - 1
controller/user.go

@@ -6,6 +6,7 @@ import (
 	"net/http"
 	"one-api/common"
 	"one-api/model"
+	"one-api/setting"
 	"strconv"
 	"strings"
 	"sync"
@@ -454,7 +455,11 @@ func GetUserModels(c *gin.Context) {
 		})
 		return
 	}
-	models := model.GetGroupModels(user.Group)
+	groups := setting.GetUserUsableGroups(user.Group)
+	var models []string
+	for group := range groups {
+		models = append(models, model.GetGroupModels(group)...)
+	}
 	c.JSON(http.StatusOK, gin.H{
 		"success": true,
 		"message": "",

+ 18 - 14
setting/user_usable_group.go

@@ -5,13 +5,21 @@ import (
 	"one-api/common"
 )
 
-var UserUsableGroups = map[string]string{
+var userUsableGroups = map[string]string{
 	"default": "默认分组",
 	"vip":     "vip分组",
 }
 
+func GetUserUsableGroupsCopy() map[string]string {
+	copyUserUsableGroups := make(map[string]string)
+	for k, v := range userUsableGroups {
+		copyUserUsableGroups[k] = v
+	}
+	return copyUserUsableGroups
+}
+
 func UserUsableGroups2JSONString() string {
-	jsonBytes, err := json.Marshal(UserUsableGroups)
+	jsonBytes, err := json.Marshal(userUsableGroups)
 	if err != nil {
 		common.SysError("error marshalling user groups: " + err.Error())
 	}
@@ -19,29 +27,25 @@ func UserUsableGroups2JSONString() string {
 }
 
 func UpdateUserUsableGroupsByJSONString(jsonStr string) error {
-	UserUsableGroups = make(map[string]string)
-	return json.Unmarshal([]byte(jsonStr), &UserUsableGroups)
+	userUsableGroups = make(map[string]string)
+	return json.Unmarshal([]byte(jsonStr), &userUsableGroups)
 }
 
 func GetUserUsableGroups(userGroup string) map[string]string {
+	groupsCopy := GetUserUsableGroupsCopy()
 	if userGroup == "" {
 		// 如果userGroup为空,返回UserUsableGroups
-		return UserUsableGroups
+		return groupsCopy
 	}
 	// 如果userGroup不在UserUsableGroups中,返回UserUsableGroups + userGroup
-	if _, ok := UserUsableGroups[userGroup]; !ok {
-		appendUserUsableGroups := make(map[string]string)
-		for k, v := range UserUsableGroups {
-			appendUserUsableGroups[k] = v
-		}
-		appendUserUsableGroups[userGroup] = "用户分组"
-		return appendUserUsableGroups
+	if _, ok := groupsCopy[userGroup]; !ok {
+		groupsCopy[userGroup] = "用户分组"
 	}
 	// 如果userGroup在UserUsableGroups中,返回UserUsableGroups
-	return UserUsableGroups
+	return groupsCopy
 }
 
 func GroupInUserUsableGroups(groupName string) bool {
-	_, ok := UserUsableGroups[groupName]
+	_, ok := userUsableGroups[groupName]
 	return ok
 }