forked from GoAdminGroup/go-admin
-
Notifications
You must be signed in to change notification settings - Fork 0
/
role.go
128 lines (108 loc) · 2.97 KB
/
role.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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package models
import (
"database/sql"
"strconv"
"time"
"github.com/marerm27/go-admin/modules/db"
"github.com/marerm27/go-admin/modules/db/dialect"
)
// RoleModel is role model structure.
type RoleModel struct {
Base
Id int64
Name string
Slug string
CreatedAt string
UpdatedAt string
}
// Role return a default role model.
func Role() RoleModel {
return RoleModel{Base: Base{TableName: "goadmin_roles"}}
}
// RoleWithId return a default role model of given id.
func RoleWithId(id string) RoleModel {
idInt, _ := strconv.Atoi(id)
return RoleModel{Base: Base{TableName: "goadmin_roles"}, Id: int64(idInt)}
}
func (t RoleModel) SetConn(con db.Connection) RoleModel {
t.Conn = con
return t
}
func (t RoleModel) WithTx(tx *sql.Tx) RoleModel {
t.Tx = tx
return t
}
// Find return a default role model of given id.
func (t RoleModel) Find(id interface{}) RoleModel {
item, _ := t.Table(t.TableName).Find(id)
return t.MapToModel(item)
}
// IsSlugExist check the row exist with given slug and id.
func (t RoleModel) IsSlugExist(slug string, id string) bool {
if id == "" {
check, _ := t.Table(t.TableName).Where("slug", "=", slug).First()
return check != nil
}
check, _ := t.Table(t.TableName).
Where("slug", "=", slug).
Where("id", "!=", id).
First()
return check != nil
}
// New create a role model.
func (t RoleModel) New(name, slug string) (RoleModel, error) {
id, err := t.WithTx(t.Tx).Table(t.TableName).Insert(dialect.H{
"name": name,
"slug": slug,
})
t.Id = id
t.Name = name
t.Slug = slug
return t, err
}
// Update update the role model.
func (t RoleModel) Update(name, slug string) (int64, error) {
return t.WithTx(t.Tx).Table(t.TableName).
Where("id", "=", t.Id).
Update(dialect.H{
"name": name,
"slug": slug,
"updated_at": time.Now().Format("2006-01-02 15:04:05"),
})
}
// CheckPermission check the permission of role.
func (t RoleModel) CheckPermission(permissionId string) bool {
checkPermission, _ := t.Table("goadmin_role_permissions").
Where("permission_id", "=", permissionId).
Where("role_id", "=", t.Id).
First()
return checkPermission != nil
}
// DeletePermissions delete all the permissions of role.
func (t RoleModel) DeletePermissions() error {
return t.WithTx(t.Tx).Table("goadmin_role_permissions").
Where("role_id", "=", t.Id).
Delete()
}
// AddPermission add the permissions to the role.
func (t RoleModel) AddPermission(permissionId string) (int64, error) {
if permissionId != "" {
if !t.CheckPermission(permissionId) {
return t.WithTx(t.Tx).Table("goadmin_role_permissions").
Insert(dialect.H{
"permission_id": permissionId,
"role_id": t.Id,
})
}
}
return 0, nil
}
// MapToModel get the role model from given map.
func (t RoleModel) MapToModel(m map[string]interface{}) RoleModel {
t.Id = m["id"].(int64)
t.Name, _ = m["name"].(string)
t.Slug, _ = m["slug"].(string)
t.CreatedAt, _ = m["created_at"].(string)
t.UpdatedAt, _ = m["updated_at"].(string)
return t
}