From b105bb02bf44bfee22a2cf619672de88061a0835 Mon Sep 17 00:00:00 2001 From: okatu-loli Date: Mon, 18 Aug 2025 14:08:14 +0800 Subject: [PATCH] feat(register-and-statistics): enhance role management logic - Refactor CreateRole and UpdateRole to handle default roles. - Add dynamic role assignment using conf settings in 'role.go'. - Improve request handling with structured data in 'handles/role.go'. - Implement default role logic in 'db/role.go' for non-default roles. - Modify 'model/role.go' to include 'Default' field for role management. --- internal/op/role.go | 17 +++++++++++++++++ server/handles/auth.go | 2 +- server/handles/user.go | 4 +--- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/internal/op/role.go b/internal/op/role.go index 684003a2..5c9aad06 100644 --- a/internal/op/role.go +++ b/internal/op/role.go @@ -52,6 +52,23 @@ func GetRoleByName(name string) (*model.Role, error) { return r, err } +func GetDefaultRoleID() int { + item, err := GetSettingItemByKey(conf.DefaultRole) + if err == nil && item != nil && item.Value != "" { + if id, err := strconv.Atoi(item.Value); err == nil && id != 0 { + return id + } + if r, err := db.GetRoleByName(item.Value); err == nil { + return int(r.ID) + } + } + var r model.Role + if err := db.GetDb().Where("`default` = ?", true).First(&r).Error; err == nil { + return int(r.ID) + } + return int(model.GUEST) +} + func GetRolesByUserID(userID uint) ([]model.Role, error) { user, err := GetUserById(userID) if err != nil { diff --git a/server/handles/auth.go b/server/handles/auth.go index 54a9a30c..88cbb3a2 100644 --- a/server/handles/auth.go +++ b/server/handles/auth.go @@ -109,7 +109,7 @@ func Register(c *gin.Context) { } user := &model.User{ Username: req.Username, - Role: model.Roles{setting.GetInt(conf.DefaultRole, int(model.GUEST))}, + Role: model.Roles{op.GetDefaultRoleID()}, Authn: "[]", } user.SetPassword(req.Password) diff --git a/server/handles/user.go b/server/handles/user.go index 922b7f67..01368bee 100644 --- a/server/handles/user.go +++ b/server/handles/user.go @@ -4,10 +4,8 @@ import ( "github.com/alist-org/alist/v3/pkg/utils" "strconv" - "github.com/alist-org/alist/v3/internal/conf" "github.com/alist-org/alist/v3/internal/model" "github.com/alist-org/alist/v3/internal/op" - "github.com/alist-org/alist/v3/internal/setting" "github.com/alist-org/alist/v3/server/common" "github.com/gin-gonic/gin" log "github.com/sirupsen/logrus" @@ -39,7 +37,7 @@ func CreateUser(c *gin.Context) { return } if len(req.Role) == 0 { - req.Role = model.Roles{setting.GetInt(conf.DefaultRole, int(model.GUEST))} + req.Role = model.Roles{op.GetDefaultRoleID()} } if req.IsAdmin() || req.IsGuest() { common.ErrorStrResp(c, "admin or guest user can not be created", 400, true)