You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2.5 KiB
2.5 KiB
用户模型
GORM 模型定义
package model
import (
"time"
"gorm.io/gorm"
)
type User struct {
ID int64 `gorm:"primaryKey" json:"id"`
UserType string `gorm:"default:'casdoor'" json:"user_type"` // casdoor/local
Username string `gorm:"uniqueIndex;size:64" json:"username"`
Password string `gorm:"size:128" json:"-"` // Casdoor 用户为空
Email string `gorm:"size:128" json:"email"`
Avatar string `gorm:"size:256" json:"avatar"`
Role string `gorm:"default:'member'" json:"role"`
Status int `gorm:"default:1" json:"status"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
}
混合用户模式
如果需要支持本地管理员 + Casdoor 用户,可以扩展模型:
type User struct {
ID int64 `gorm:"primaryKey" json:"id"`
UserType string `gorm:"default:'casdoor'" json:"user_type"` // casdoor/local/federation
CasdoorID string `gorm:"size:64" json:"casdoor_id,omitempty"` // Casdoor 用户 ID
ExternalID string `gorm:"size:64" json:"external_id,omitempty"` // 外部系统 ID
Source string `gorm:"size:64" json:"source,omitempty"` // 来源系统
Username string `gorm:"uniqueIndex;size:64" json:"username"`
Password string `gorm:"size:128" json:"-"`
Email string `gorm:"size:128" json:"email"`
Avatar string `gorm:"size:256" json:"avatar"`
Role string `gorm:"default:'member'" json:"role"`
Status int `gorm:"default:1" json:"status"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
}
用户类型说明
| UserType | 说明 | 密码存储 |
|---|---|---|
local |
本地管理员,在数据库中管理 | 本地加密存储 |
casdoor |
Casdoor 用户,SSO 登录 | 空(Casdoor 管理) |
federation |
联邦用户,来自第三方系统 | 空(源系统管理) |
自动迁移
func NewServiceContext(c config.Config) *ServiceContext {
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=true",
c.MySQL.Username, c.MySQL.Password, c.MySQL.Host, c.MySQL.Port, c.MySQL.Database)
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic(err)
}
// 自动创建表
db.AutoMigrate(&model.User{})
return &ServiceContext{DB: db}
}