forked from 1340691923/ElasticView
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRoleController.go
More file actions
152 lines (129 loc) · 3.57 KB
/
RoleController.go
File metadata and controls
152 lines (129 loc) · 3.57 KB
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
package api
import (
"github.com/1340691923/ElasticView/pkg/engine/rbac"
"strconv"
"github.com/1340691923/ElasticView/model"
"github.com/1340691923/ElasticView/pkg/engine/db"
"github.com/1340691923/ElasticView/pkg/engine/logs"
"github.com/1340691923/ElasticView/pkg/request"
"github.com/1340691923/ElasticView/pkg/response"
"github.com/1340691923/ElasticView/pkg/util"
"github.com/1340691923/ElasticView/service/gm_role"
. "github.com/gofiber/fiber/v2"
)
// GM角色控制器
type RoleController struct {
BaseController
}
//获取所有的GM 角色
func (this RoleController) RolesAction(ctx *Ctx) error {
var service gm_role.GmRoleService
roles, err := service.Select()
if err != nil {
return this.Error(ctx, err)
}
var list []request.GmRoleModel
for _, v := range roles {
roleRes := request.GmRoleModel{
ID: v.ID,
RoleName: v.RoleName,
Description: v.Description,
RoleList: v.RoleList,
}
apis := []string{}
rows, err := db.Sqlx.Query("select v1 from casbin_rule where v0 = ?;", v.ID)
if util.FilterMysqlNilErr(err) {
logs.Logger.Sugar().Errorf("err:", err)
continue
}
defer rows.Close()
for rows.Next() {
api := ""
err := rows.Scan(&api)
if err != nil {
logs.Logger.Sugar().Errorf("err:", err)
continue
}
apis = append(apis, api)
}
roleRes.Api = apis
list = append(list, roleRes)
}
if err != nil {
return this.Error(ctx, err)
}
return this.Success(ctx, response.SearchSuccess, list)
}
//新增GM角色
func (this RoleController) RolesAddAction(ctx *Ctx) error {
var model2 request.GmRoleModel
err := ctx.BodyParser(&model2)
if err != nil {
return this.Error(ctx, err)
}
var roleModel model.GmRoleModel
roleModel.ID = model2.ID
roleModel.RoleName = model2.RoleName
roleModel.RoleList = model2.RoleList
roleModel.Description = model2.Description
roleModel.ID = model2.ID
id, err := roleModel.Insert()
if err != nil {
return this.Error(ctx, err)
}
go func() {
for _, api := range model2.Api {
_, err = rbac.Enforcer.AddPolicySafe(strconv.Itoa(int(id)), api, "*")
if err != nil {
logs.Logger.Sugar().Errorf("err:%s", err.Error())
return
}
}
}()
return this.Success(ctx, response.OperateSuccess, util.Map{"id": id})
}
// 修改GM角色
func (this RoleController) RolesUpdateAction(ctx *Ctx) error {
var model2 request.GmRoleModel
err := ctx.BodyParser(&model2)
if err != nil {
return this.Error(ctx, err)
}
var roleModel model.GmRoleModel
roleModel.ID = model2.ID
roleModel.RoleName = model2.RoleName
roleModel.RoleList = model2.RoleList
roleModel.Description = model2.Description
err = roleModel.Update()
rbac.Enforcer.RemoveFilteredPolicy(0, strconv.Itoa(model2.ID)) //先全清掉
go func() {
for _, api := range model2.Api {
_, err = rbac.Enforcer.AddPolicySafe(strconv.Itoa(model2.ID), api, "*")
if err != nil {
logs.Logger.Sugar().Errorf("err:%s", err.Error())
return
}
}
}()
return this.Success(ctx, response.OperateSuccess, nil)
}
// 删除GM角色
func (this RoleController) RolesDelAction(ctx *Ctx) error {
id := this.FormIntDefault(ctx, "id", 0)
var service gm_role.GmRoleService
err := service.Delete(id)
if err != nil {
return this.Error(ctx, err)
}
rbac.Enforcer.RemoveFilteredPolicy(0, strconv.Itoa(id)) //先全清掉
return this.Success(ctx, response.OperateSuccess, nil)
}
// 获取Gm角色下拉选
func (this RoleController) RoleOptionAction(ctx *Ctx) error {
var model model.GmRoleModel
list, err := model.Select()
if err != nil {
return this.Error(ctx, err)
}
return this.Success(ctx, response.SearchSuccess, list)
}