@@ -7,55 +7,82 @@ import (
77 "github.com/samber/lo"
88)
99
10- type AccessConditionReq struct {
11- Table string
10+ // 设置 _access/_request 自定义表名
11+ // todo
12+ var (
13+ TableAccess = "_access"
14+ TableRequest = "_request"
15+ )
16+
17+ type ConditionReq struct {
18+ AccessName string // _access 中的alias
1219 TableAccessRoleList []string
1320 Method string
1421 NodeReq g.Map //节点的请求数据
1522 NodeRole string // 节点的角色
1623}
1724
18- type RoleReq struct {
19- Table string
20- Method string
21- NodeRole string // 前端传入的节点的角色, 目前未传入则为空
25+ type ConditionRet struct {
26+ condition map [string ]any
2227}
2328
24- // AccessCondition 根据传入的ctx获取用户信息, 结合req 中的信息 返回需要添加到sql的where条件
25- type AccessCondition func (ctx context.Context , req AccessConditionReq ) (g.Map , error )
29+ func (c * ConditionRet ) Add (k string , v any ) { // todo any?
30+ c .condition [k ] = v
31+ }
32+
33+ func (c * ConditionRet ) Where () map [string ]any {
34+ return c .condition
35+ }
36+
37+ type AccessCondition func (ctx context.Context , req ConditionReq ) (* ConditionRet , error )
38+
39+ type RoleReq struct {
40+ AccessName string
41+ Method string
42+ NodeRole string // 前端传入的节点的角色, 目前未传入则为空
43+ }
2644
27- // DefaultRole nodeRole 为前端显式指定的role, 需要此函数中判断该role是不是用户角色之一, 返回最终该节点的角色
2845type DefaultRole func (ctx context.Context , req RoleReq ) (string , error )
2946
30- var (
31- // AccessVerify 是否禁用权限验证
32- NoAccessVerify = true
33- // AccessConditionFunc 自定义权限限制条件
34- AccessConditionFunc AccessCondition
35- // DefaultRoleFunc 自定义获取节点的默认角色
36- DefaultRoleFunc DefaultRole = func (ctx context.Context , req RoleReq ) (string , error ) {
37- return consts .UNKNOWN , nil
38- }
39- )
47+ func defaultRole (ctx context.Context , req RoleReq ) (string , error ) {
48+ return consts .UNKNOWN , nil
49+ }
4050
41- // 设置 _access/_request 自定义表名
42- var (
43- TableAccess = "_access"
44- TableRequest = "_request"
45- )
51+ func defaultCondition (ctx context.Context , req ConditionReq ) (* ConditionRet , error ) {
52+ return & ConditionRet {}, nil
53+ }
4654
47- // ========================= 角色 =======================
48- // 角色列表
49- // access 中填写的角色应在角色列表中
55+ type Access struct {
56+ // 禁用_access权限校验, 默认为false, 需手动开启
57+ NoVerify bool
5058
51- var (
52- roleList = []string {consts .UNKNOWN , consts .LOGIN , consts .OWNER , consts .ADMIN }
53- )
59+ // 用于 根据accessName+user来自定义添加sql条件, 完成数据的权限限制
60+ ConditionFunc AccessCondition
61+
62+ // nodeRole 为前端显式指定的role, 需要此函数中判断该role是不是用户角色之一, 返回最终该节点的角色
63+ DefaultRoleFunc DefaultRole
64+
65+ roleList []string
66+ }
67+
68+ func NewAccess () * Access {
69+
70+ a := & Access {}
71+ a .ConditionFunc = defaultCondition
72+ a .DefaultRoleFunc = defaultRole
73+ a .roleList = []string {consts .UNKNOWN , consts .LOGIN , consts .OWNER , consts .ADMIN }
74+
75+ return a
76+ }
5477
55- func AddRole (name string ) {
56- if ! lo .Contains (roleList , name ) {
57- roleList = append (roleList , name )
78+ // AddRole 添加应用中额外的角色
79+ func (a * Access ) AddRole (roles []string ) * Access {
80+ for _ , role := range roles {
81+ if ! lo .Contains (a .roleList , role ) {
82+ a .roleList = append (a .roleList , role )
83+ }
5884 }
85+ return a
5986}
6087
61- func RoleList () []string { return roleList }
88+ func ( a * Access ) RoleList () []string { return a . roleList }
0 commit comments