user_usable_group.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package setting
  2. import (
  3. "encoding/json"
  4. "one-api/common"
  5. "sync"
  6. )
  7. var userUsableGroups = map[string]string{
  8. "default": "默认分组",
  9. "vip": "vip分组",
  10. }
  11. var userUsableGroupsMutex sync.RWMutex
  12. func GetUserUsableGroupsCopy() map[string]string {
  13. userUsableGroupsMutex.RLock()
  14. defer userUsableGroupsMutex.RUnlock()
  15. copyUserUsableGroups := make(map[string]string)
  16. for k, v := range userUsableGroups {
  17. copyUserUsableGroups[k] = v
  18. }
  19. return copyUserUsableGroups
  20. }
  21. func UserUsableGroups2JSONString() string {
  22. userUsableGroupsMutex.RLock()
  23. defer userUsableGroupsMutex.RUnlock()
  24. jsonBytes, err := json.Marshal(userUsableGroups)
  25. if err != nil {
  26. common.SysError("error marshalling user groups: " + err.Error())
  27. }
  28. return string(jsonBytes)
  29. }
  30. func UpdateUserUsableGroupsByJSONString(jsonStr string) error {
  31. userUsableGroupsMutex.Lock()
  32. defer userUsableGroupsMutex.Unlock()
  33. userUsableGroups = make(map[string]string)
  34. return json.Unmarshal([]byte(jsonStr), &userUsableGroups)
  35. }
  36. func GetUserUsableGroups(userGroup string) map[string]string {
  37. groupsCopy := GetUserUsableGroupsCopy()
  38. if userGroup == "" {
  39. if _, ok := groupsCopy["default"]; !ok {
  40. groupsCopy["default"] = "default"
  41. }
  42. }
  43. // 如果userGroup不在UserUsableGroups中,返回UserUsableGroups + userGroup
  44. if _, ok := groupsCopy[userGroup]; !ok {
  45. groupsCopy[userGroup] = "用户分组"
  46. }
  47. // 如果userGroup在UserUsableGroups中,返回UserUsableGroups
  48. return groupsCopy
  49. }
  50. func GroupInUserUsableGroups(groupName string) bool {
  51. userUsableGroupsMutex.RLock()
  52. defer userUsableGroupsMutex.RUnlock()
  53. _, ok := userUsableGroups[groupName]
  54. return ok
  55. }
  56. func GetUsableGroupDescription(groupName string) string {
  57. userUsableGroupsMutex.RLock()
  58. defer userUsableGroupsMutex.RUnlock()
  59. if desc, ok := userUsableGroups[groupName]; ok {
  60. return desc
  61. }
  62. return groupName
  63. }