-
Notifications
You must be signed in to change notification settings - Fork 114
/
rbac.go
90 lines (73 loc) · 2.21 KB
/
rbac.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package repository
import (
"github.com/qingwave/weave/pkg/database"
"github.com/qingwave/weave/pkg/model"
"gorm.io/gorm"
"gorm.io/gorm/clause"
)
type rbacRepository struct {
db *gorm.DB
rdb *database.RedisDB
}
func newRBACRepository(db *gorm.DB, rdb *database.RedisDB) RBACRepository {
return &rbacRepository{
db: db,
rdb: rdb,
}
}
func (rbac *rbacRepository) List() ([]model.Role, error) {
roles := make([]model.Role, 0)
if err := rbac.db.Find(&roles).Error; err != nil {
return nil, err
}
return roles, nil
}
func (rbac *rbacRepository) ListResources() ([]model.Resource, error) {
resources := make([]model.Resource, 0)
if err := rbac.db.Order("name").Find(&resources).Error; err != nil {
return nil, err
}
return resources, nil
}
func (rbac *rbacRepository) Create(role *model.Role) (*model.Role, error) {
err := rbac.db.Create(role).Error
return role, err
}
func (rbac *rbacRepository) CreateResource(resource *model.Resource) (*model.Resource, error) {
err := rbac.db.Create(resource).Error
return resource, err
}
func (rbac *rbacRepository) CreateResources(resources []model.Resource, conds ...clause.Expression) error {
err := rbac.db.Clauses(conds...).Create(resources).Error
return err
}
func (rbac *rbacRepository) GetRoleByID(id int) (*model.Role, error) {
role := &model.Role{}
err := rbac.db.First(role, id).Error
return role, err
}
func (rbac *rbacRepository) GetResource(id int) (*model.Resource, error) {
res := &model.Resource{}
err := rbac.db.First(res, id).Error
return res, err
}
func (rbac *rbacRepository) GetRoleByName(name string) (*model.Role, error) {
role := new(model.Role)
if err := rbac.db.Preload(model.UserAssociation).Where("name = ?", name).First(role).Error; err != nil {
return nil, err
}
return role, nil
}
func (rbac *rbacRepository) Update(role *model.Role) (*model.Role, error) {
err := rbac.db.Updates(role).Error
return role, err
}
func (rbac *rbacRepository) Delete(id uint) error {
return rbac.db.Delete(&model.Role{}, id).Error
}
func (rbac *rbacRepository) DeleteResource(id uint) error {
return rbac.db.Delete(&model.Resource{}, id).Error
}
func (rbac *rbacRepository) Migrate() error {
return rbac.db.AutoMigrate(&model.Role{}, &model.Resource{})
}