123 lines
3.3 KiB
Go
123 lines
3.3 KiB
Go
package system
|
|
|
|
import (
|
|
"context"
|
|
|
|
"kra/internal/biz/system"
|
|
"kra/internal/data/model"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/pkg/errors"
|
|
"golang.org/x/crypto/bcrypt"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
const initOrderUser = initOrderAuthority + 1
|
|
|
|
type initUser struct{}
|
|
|
|
func NewInitUser() system.SubInitializer {
|
|
return &initUser{}
|
|
}
|
|
|
|
func (i *initUser) MigrateTable(ctx context.Context) (context.Context, error) {
|
|
db, ok := ctx.Value("db").(*gorm.DB)
|
|
if !ok {
|
|
return ctx, system.ErrMissingDBContext
|
|
}
|
|
return ctx, db.AutoMigrate(&model.SysUser{})
|
|
}
|
|
|
|
func (i *initUser) TableCreated(ctx context.Context) bool {
|
|
db, ok := ctx.Value("db").(*gorm.DB)
|
|
if !ok {
|
|
return false
|
|
}
|
|
return db.Migrator().HasTable(&model.SysUser{})
|
|
}
|
|
|
|
func (i *initUser) InitializerName() string {
|
|
return model.TableNameSysUser
|
|
}
|
|
|
|
func (i *initUser) InitializeData(ctx context.Context) (next context.Context, err error) {
|
|
db, ok := ctx.Value("db").(*gorm.DB)
|
|
if !ok {
|
|
return ctx, system.ErrMissingDBContext
|
|
}
|
|
|
|
ap := ctx.Value("adminPassword")
|
|
apStr, ok := ap.(string)
|
|
if !ok {
|
|
apStr = "123456"
|
|
}
|
|
|
|
password := bcryptHash(apStr)
|
|
adminPassword := bcryptHash(apStr)
|
|
|
|
entities := []model.SysUser{
|
|
{
|
|
UUID: uuid.New().String(),
|
|
Username: "admin",
|
|
Password: adminPassword,
|
|
NickName: "超级管理员",
|
|
HeaderImg: "https://qmplusimg.henrongyi.top/1576554439myAvatar.png",
|
|
AuthorityID: 888,
|
|
Phone: "17611111111",
|
|
Email: "333333333@qq.com",
|
|
},
|
|
{
|
|
UUID: uuid.New().String(),
|
|
Username: "a303176530",
|
|
Password: password,
|
|
NickName: "用户1",
|
|
HeaderImg: "https://qmplusimg.henrongyi.top/1572075907logo.png",
|
|
AuthorityID: 9528,
|
|
Phone: "17611111111",
|
|
Email: "333333333@qq.com",
|
|
},
|
|
}
|
|
if err = db.Create(&entities).Error; err != nil {
|
|
return ctx, errors.Wrap(err, model.TableNameSysUser+"表数据初始化失败!")
|
|
}
|
|
next = context.WithValue(ctx, i.InitializerName(), entities)
|
|
|
|
// 获取权限数据
|
|
authorities, ok := ctx.Value(model.TableNameSysAuthority).([]model.SysAuthority)
|
|
if !ok {
|
|
return next, errors.Wrap(system.ErrMissingDependentContext, "创建 [用户-权限] 关联失败, 未找到权限表初始化数据")
|
|
}
|
|
|
|
// 为admin用户分配所有权限
|
|
for _, auth := range authorities {
|
|
if err = db.Exec("INSERT INTO sys_user_authority (sys_user_id, sys_authority_authority_id) VALUES (?, ?)", entities[0].ID, auth.AuthorityID).Error; err != nil {
|
|
return next, errors.Wrap(err, "为admin用户分配权限失败")
|
|
}
|
|
}
|
|
|
|
// 为普通用户分配第一个权限
|
|
if err = db.Exec("INSERT INTO sys_user_authority (sys_user_id, sys_authority_authority_id) VALUES (?, ?)", entities[1].ID, authorities[0].AuthorityID).Error; err != nil {
|
|
return next, errors.Wrap(err, "为普通用户分配权限失败")
|
|
}
|
|
|
|
return next, nil
|
|
}
|
|
|
|
func (i *initUser) DataInserted(ctx context.Context) bool {
|
|
db, ok := ctx.Value("db").(*gorm.DB)
|
|
if !ok {
|
|
return false
|
|
}
|
|
var count int64
|
|
if err := db.Model(&model.SysUser{}).Where("username = ?", "a303176530").Count(&count).Error; err != nil {
|
|
return false
|
|
}
|
|
return count > 0
|
|
}
|
|
|
|
// bcryptHash 使用bcrypt对密码进行加密
|
|
func bcryptHash(password string) string {
|
|
bytes, _ := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
|
|
return string(bytes)
|
|
}
|