mirror of
https://github.com/AlistGo/alist.git
synced 2025-11-25 03:15:10 +08:00
* feat(setting): add role-based default and registration settings (closed #feat/register-and-statistics) - Added `AllowRegister` and `DefaultRole` settings to site configuration. - Integrated dynamic role options for `DefaultRole` using `op.GetRoles`. - Updated `setting.go` handlers to manage `DefaultRole` options dynamically. - Modified `const.go` to include new site settings constants. - Updated dependencies in `go.mod` and `go.sum` to support new functionality. * feat(register-and-statistics): add user registration endpoint - Added `POST /auth/register` endpoint to support user registration. - Implemented registration logic in `auth.go` with dynamic role assignment. - Integrated settings `AllowRegister` and `DefaultRole` for registration flow. - Updated imports to include new modules: `conf`, `setting`. - Adjusted user creation logic to use `DefaultRole` setting dynamically. * feat(register-and-statistics): add user registration endpoint (#register-and-statistics) - Added `POST /auth/register` endpoint to support user registration. - Implemented registration logic in `auth.go` with dynamic role assignment. - Integrated `AllowRegister` and `DefaultRole` settings for registration flow. - Updated imports to include new modules: `conf`, `setting`. - Adjusted user creation logic to use `DefaultRole` dynamically. * feat(register-and-statistics): enhance role management logic (#register-and-statistics) - Refactored CreateRole and UpdateRole functions to handle default role. - Added dynamic role assignment logic in 'role.go' using conf settings. - Improved request handling in 'handles/role.go' with structured data. - Implemented default role logic in 'db/role.go' to update non-default roles. - Modified 'model/role.go' to include a 'Default' field for role management. * 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. * feat(register-and-statistics): improve role handling logic - Switch from role names to role IDs for better consistency. - Update logic to prioritize "guest" for default role ID. - Adjust `DefaultRole` setting to use role IDs. - Refactor `getRoleOptions` to return role IDs as a comma-separated string. * feat(register-and-statistics): improve role handling logic
54 lines
1.5 KiB
Go
54 lines
1.5 KiB
Go
package model
|
|
|
|
import (
|
|
"encoding/json"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// PermissionEntry defines permission bitmask for a specific path.
|
|
type PermissionEntry struct {
|
|
Path string `json:"path"` // path prefix, e.g. "/admin"
|
|
Permission int32 `json:"permission"` // bitmask permissions
|
|
}
|
|
|
|
// Role represents a permission template which can be bound to users.
|
|
type Role struct {
|
|
ID uint `json:"id" gorm:"primaryKey"`
|
|
Name string `json:"name" gorm:"unique" binding:"required"`
|
|
Description string `json:"description"`
|
|
Default bool `json:"default" gorm:"default:false"`
|
|
// PermissionScopes stores structured permission list and is ignored by gorm.
|
|
PermissionScopes []PermissionEntry `json:"permission_scopes" gorm:"-"`
|
|
// RawPermission is the JSON representation of PermissionScopes stored in DB.
|
|
RawPermission string `json:"-" gorm:"type:text"`
|
|
}
|
|
|
|
// BeforeSave GORM hook serializes PermissionScopes into RawPermission.
|
|
func (r *Role) BeforeSave(tx *gorm.DB) error {
|
|
if len(r.PermissionScopes) == 0 {
|
|
r.RawPermission = ""
|
|
return nil
|
|
}
|
|
bs, err := json.Marshal(r.PermissionScopes)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
r.RawPermission = string(bs)
|
|
return nil
|
|
}
|
|
|
|
// AfterFind GORM hook deserializes RawPermission into PermissionScopes.
|
|
func (r *Role) AfterFind(tx *gorm.DB) error {
|
|
if r.RawPermission == "" {
|
|
r.PermissionScopes = nil
|
|
return nil
|
|
}
|
|
var scopes []PermissionEntry
|
|
if err := json.Unmarshal([]byte(r.RawPermission), &scopes); err != nil {
|
|
return err
|
|
}
|
|
r.PermissionScopes = scopes
|
|
return nil
|
|
}
|