uauth/rbac/rbac.go

76 lines
1.6 KiB
Go
Raw Normal View History

2024-11-01 17:53:47 +08:00
package rbac
import (
"fmt"
"strings"
2024-11-04 18:09:39 +08:00
"uauth/internal/interfaces"
"uauth/internal/store/cache"
"uauth/internal/store/db"
2024-11-01 17:53:47 +08:00
"uauth/internal/tool"
2024-11-04 18:09:39 +08:00
"uauth/model"
2024-11-01 17:53:47 +08:00
)
type Urbac struct {
2024-11-04 18:09:39 +08:00
cache interfaces.Cacher
store interfaces.Store
2024-11-01 17:53:47 +08:00
}
type Option func(u *Urbac)
func New(opts ...Option) (*Urbac, error) {
var (
err error
u = &Urbac{}
2024-11-04 18:09:39 +08:00
rootPrivilege *model.Privilege
rootRole *model.Role
rootScope *model.Scope
2024-11-04 22:04:00 +08:00
rootUser *model.User
2024-11-01 17:53:47 +08:00
)
for _, opt := range opts {
opt(u)
}
if u.store == nil {
2024-11-04 18:09:39 +08:00
u.store = db.Default
2024-11-01 17:53:47 +08:00
}
if u.cache == nil {
2024-11-04 18:09:39 +08:00
u.cache = cache.Client
2024-11-01 17:53:47 +08:00
}
2024-11-04 18:09:39 +08:00
if err = u.store.Session(tool.Timeout()).AutoMigrate(&model.Scope{}, &model.Privilege{}, &model.Role{}); err != nil {
2024-11-01 17:53:47 +08:00
return nil, fmt.Errorf("urbac migrate err: %w", err)
}
2024-11-04 18:09:39 +08:00
if rootPrivilege, err = u.newPrivilege(tool.Timeout(), "*:*:*:*", "admin", "", "*"); err != nil {
2024-11-01 17:53:47 +08:00
if !strings.Contains(strings.ToLower(err.Error()), "unique") {
return nil, err
}
}
if rootRole, err = u.newRole(tool.Timeout(), "admin", "管理员", "", rootPrivilege); err != nil {
if !strings.Contains(strings.ToLower(err.Error()), "unique") {
return nil, err
}
}
if rootScope, err = u.newScope(tool.Timeout(), "*", "全部", ""); err != nil {
if !strings.Contains(strings.ToLower(err.Error()), "unique") {
return nil, err
}
}
2024-11-04 22:04:00 +08:00
rootUser = &model.User{
Username: "admin",
Password: tool.NewPassword("123456"),
Status: model.StatusActive,
Nickname: "管理员",
2024-11-08 09:57:48 +08:00
RoleNames: []string{rootRole.Code},
2024-11-04 22:04:00 +08:00
}
2024-11-08 09:57:48 +08:00
_, err = u.newUser(rootUser)
2024-11-04 22:04:00 +08:00
2024-11-08 09:57:48 +08:00
return u, err
2024-11-01 17:53:47 +08:00
}