86 lines
1.2 KiB
Go
86 lines
1.2 KiB
Go
package model
|
|
|
|
import (
|
|
"encoding/json"
|
|
"github.com/loveuer/nfflow/internal/opt"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type _role struct {
|
|
Value uint8 `json:"value"`
|
|
Code string `json:"code"`
|
|
Label string `json:"label"`
|
|
}
|
|
|
|
type Role uint8
|
|
|
|
var _ Enum = Role(0)
|
|
|
|
func (u Role) MarshalJSON() ([]byte, error) {
|
|
m := _role{
|
|
Value: uint8(u),
|
|
Code: u.Code(),
|
|
Label: u.Label(),
|
|
}
|
|
return json.Marshal(m)
|
|
}
|
|
|
|
const (
|
|
RoleRoot Role = 255
|
|
RoleAdmin Role = 254
|
|
RoleUser Role = 100
|
|
)
|
|
|
|
func (u Role) Code() string {
|
|
switch u {
|
|
case RoleRoot:
|
|
return "root"
|
|
case RoleAdmin:
|
|
return "admin"
|
|
case RoleUser:
|
|
return "user"
|
|
default:
|
|
return "unknown"
|
|
}
|
|
}
|
|
|
|
func (u Role) Label() string {
|
|
switch u {
|
|
case RoleRoot:
|
|
return "根用户"
|
|
case RoleAdmin:
|
|
return "管理员"
|
|
case RoleUser:
|
|
return "用户"
|
|
default:
|
|
return "未知"
|
|
}
|
|
}
|
|
|
|
func (u Role) Value() int64 {
|
|
return int64(u)
|
|
}
|
|
|
|
func (u Role) All() []Enum {
|
|
return []Enum{
|
|
RoleAdmin,
|
|
RoleUser,
|
|
}
|
|
}
|
|
|
|
func (u Role) Where(db *gorm.DB) *gorm.DB {
|
|
if opt.RoleMustLess {
|
|
return db.Where("users.role < ?", u.Value())
|
|
} else {
|
|
return db.Where("users.role <= ?", u.Value())
|
|
}
|
|
}
|
|
|
|
func (u Role) CanOP(op *User) bool {
|
|
if opt.RoleMustLess {
|
|
return op.Role > u
|
|
}
|
|
|
|
return op.Role >= u
|
|
}
|