8
8
"""
9
9
import datetime
10
10
from functools import reduce
11
+ from typing import List
11
12
12
13
from django .core .cache import cache
13
14
from django .db .models import QuerySet
14
15
from django .utils .translation import gettext_lazy as _
15
16
16
17
from common .auth .handle .auth_base_handle import AuthBaseHandle
17
18
from common .constants .cache_version import Cache_Version
18
- from common .constants .permission_constants import Auth , RoleConstants , get_default_permission_list_by_role , \
19
- PermissionConstants
19
+ from common .constants .permission_constants import Auth , PermissionConstants , ResourcePermissionGroup , \
20
+ get_permission_list_by_resource_group , ResourceAuthType , \
21
+ ResourcePermissionRole , get_default_role_permission_mapping_list , get_default_workspace_user_role_mapping_list
20
22
from common .database_model_manage .database_model_manage import DatabaseModelManage
21
23
from common .exception .app_exception import AppAuthenticationFailed
22
24
from common .utils .common import group_by
23
- from system_manage .models .workspace_user_permission import WorkspaceUserPermission
25
+ from system_manage .models .workspace_user_permission import WorkspaceUserResourcePermission
24
26
from users .models import User
25
27
26
28
27
29
def get_permission (permission_id ):
30
+ """
31
+ 获取权限字符串
32
+ @param permission_id: 权限id
33
+ @return: 权限字符串
34
+ """
28
35
if isinstance (permission_id , PermissionConstants ):
29
36
permission_id = permission_id .value
30
37
return f"{ permission_id } "
31
38
32
39
33
40
def get_workspace_permission (permission_id , workspace_id ):
41
+ """
42
+ 获取工作空间权限字符串
43
+ @param permission_id: 权限id
44
+ @param workspace_id: 工作空间id
45
+ @return:
46
+ """
34
47
if isinstance (permission_id , PermissionConstants ):
35
48
permission_id = permission_id .value
36
49
return f"{ permission_id } :/WORKSPACE/{ workspace_id } "
37
50
38
51
39
- def get_workspace_resource_permission_list (permission_id , workspace_id , workspace_user_permission_dict ):
40
- workspace_user_permission_list = workspace_user_permission_dict .get (workspace_id )
41
- if workspace_user_permission_list is None :
52
+ def get_workspace_permission_list (role_permission_mapping_dict , workspace_user_role_mapping_list ):
53
+ """
54
+ 获取工作空间下所有的权限
55
+ @param role_permission_mapping_dict: 角色权限关联字典
56
+ @param workspace_user_role_mapping_list: 工作空间用户角色关联列表
57
+ @return: 工作空间下的权限
58
+ """
59
+ workspace_permission_list = [
60
+ [get_workspace_permission (role_permission_mapping .permission_id , w_u_r .workspace_id ) for role_permission_mapping
61
+ in
62
+ role_permission_mapping_dict .get (w_u_r .role_id , [])] for w_u_r in workspace_user_role_mapping_list ]
63
+ return reduce (lambda x , y : [* x , * y ], workspace_permission_list , [])
64
+
65
+
66
+ def get_workspace_resource_permission_list (
67
+ workspace_user_resource_permission_list : List [WorkspaceUserResourcePermission ],
68
+ role_permission_mapping_dict ,
69
+ workspace_user_role_mapping_dict ):
70
+ """
71
+
72
+ @param workspace_user_resource_permission_list: 工作空间用户资源权限列表
73
+ @param role_permission_mapping_dict: 角色权限关联字典 key为role_id
74
+ @param workspace_user_role_mapping_dict: 工作空间用户角色映射字典 key为role_id
75
+ @return: 工作空间资源权限列表
76
+ """
77
+ resource_permission_list = [
78
+ get_workspace_resource_permission_list_by_workspace_user_permission (workspace_user_resource_permission ,
79
+ role_permission_mapping_dict ,
80
+ workspace_user_role_mapping_dict ) for
81
+ workspace_user_resource_permission in workspace_user_resource_permission_list ]
82
+ # 将二维数组扁平为一维
83
+ return reduce (lambda x , y : [* x , * y ], resource_permission_list , [])
84
+
85
+
86
+ def get_workspace_resource_permission_list_by_workspace_user_permission (
87
+ workspace_user_resource_permission : WorkspaceUserResourcePermission ,
88
+ role_permission_mapping_dict ,
89
+ workspace_user_role_mapping_dict ):
90
+ """
91
+
92
+ @param workspace_user_resource_permission: 工作空间用户资源权限对象
93
+ @param role_permission_mapping_dict: 角色权限关联字典 key为role_id
94
+ @param workspace_user_role_mapping_dict: 工作空间用户角色关联字典 key为role_id
95
+ @return: 工作空间用户资源的权限列表
96
+ """
97
+
98
+ role_permission_mapping_list = [role_permission_mapping_dict .get (workspace_user_role_mapping .role_id ) for
99
+ workspace_user_role_mapping in
100
+ workspace_user_role_mapping_dict .get (
101
+ workspace_user_resource_permission .workspace_id )]
102
+ role_permission_mapping_list = reduce (lambda x , y : [* x , * y ], role_permission_mapping_list , [])
103
+ # 如果是根据角色
104
+ if (workspace_user_resource_permission .auth_target_type == ResourceAuthType .ROLE
105
+ and workspace_user_resource_permission .permission_list .__contains__ (
106
+ ResourcePermissionRole .ROLE )):
42
107
return [
43
- get_workspace_permission (permission_id , workspace_id ), get_permission (permission_id )]
44
- return [
45
- f"{ permission_id } :/WORKSPACE/{ workspace_id } /{ workspace_user_permission .auth_target_type } /{ workspace_user_permission .target } "
46
- for workspace_user_permission in
47
- workspace_user_permission_list if workspace_user_permission .is_auth ] + [
48
- get_workspace_permission (permission_id , workspace_id ), get_permission (permission_id )]
108
+ f"{ role_permission_mapping .permission_id } :/WORKSPACE/{ workspace_user_resource_permission .workspace_id } /{ workspace_user_resource_permission .auth_target_type } /{ workspace_user_resource_permission .target } "
109
+ for role_permission_mapping in role_permission_mapping_list ]
110
+
111
+ elif workspace_user_resource_permission .auth_target_type == ResourceAuthType .RESOURCE_PERMISSION_GROUP :
112
+ resource_permission_list = [
113
+ [
114
+ f"{ permission } :/WORKSPACE/{ workspace_user_resource_permission .workspace_id } /{ workspace_user_resource_permission .auth_target_type } /{ workspace_user_resource_permission .target } "
115
+ for permission in get_permission_list_by_resource_group (ResourcePermissionGroup [resource_permission ])]
116
+ for resource_permission in workspace_user_resource_permission .permission_list if
117
+ ResourcePermissionGroup .values .__contains__ (resource_permission )]
118
+ # 将二维数组扁平为一维
119
+ return reduce (lambda x , y : [* x , * y ], resource_permission_list , [])
120
+ return []
49
121
50
122
51
123
def get_permission_list (user ,
@@ -63,41 +135,53 @@ def get_permission_list(user,
63
135
if is_query_model :
64
136
# 获取工作空间 用户 角色映射数据
65
137
workspace_user_role_mapping_list = QuerySet (workspace_user_role_mapping_model ).filter (user_id = user_id )
138
+ workspace_user_role_mapping_dict = group_by (workspace_user_role_mapping_list ,
139
+ lambda item : item .role_id )
66
140
# 获取角色权限映射数据
67
141
role_permission_mapping_list = QuerySet (role_permission_mapping_model ).filter (
68
142
role_id__in = [workspace_user_role_mapping .role_id for workspace_user_role_mapping in
69
143
workspace_user_role_mapping_list ])
70
- role_dict = group_by (role_permission_mapping_list , lambda item : item .get ( ' role_id' ) )
144
+ role_permission_mapping_dict = group_by (role_permission_mapping_list , lambda item : item .role_id )
71
145
72
- workspace_user_permission_list = QuerySet (WorkspaceUserPermission ).filter (
146
+ workspace_user_permission_list = QuerySet (WorkspaceUserResourcePermission ).filter (
73
147
workspace_id__in = [workspace_user_role .workspace_id for workspace_user_role in
74
148
workspace_user_role_mapping_list ])
75
- workspace_user_permission_dict = group_by (workspace_user_permission_list ,
76
- key = lambda item : item .workspace_id )
77
- permission_list = [
78
- get_workspace_resource_permission_list (role_permission_mapping .permission_id ,
79
- role_dict .get (role_permission_mapping .role_id ).workspace_id ,
80
- workspace_user_permission_dict )
81
- for role_permission_mapping in
82
- role_permission_mapping_list ]
83
-
84
- # 将二维数组扁平为一维
85
- permission_list = reduce (lambda x , y : [* x , * y ], permission_list , [])
149
+
150
+ # 资源权限
151
+ workspace_resource_permission_list = get_workspace_resource_permission_list (workspace_user_permission_list ,
152
+ role_permission_mapping_dict ,
153
+ workspace_user_role_mapping_dict )
154
+
155
+ workspace_permission_list = get_workspace_permission_list (role_permission_mapping_dict ,
156
+ workspace_user_role_mapping_list )
157
+ # 系统权限
158
+ system_permission_list = [role_permission_mapping .permission_id for role_permission_mapping in
159
+ role_permission_mapping_list ]
160
+ # 合并权限
161
+ permission_list = system_permission_list + workspace_permission_list + workspace_resource_permission_list
86
162
cache .set (key , permission_list , version = version )
87
163
else :
88
164
workspace_id_list = ['default' ]
89
- workspace_user_permission_list = QuerySet (WorkspaceUserPermission ).filter (
165
+ workspace_user_resource_permission_list = QuerySet (WorkspaceUserResourcePermission ).filter (
90
166
workspace_id__in = workspace_id_list )
91
-
92
- workspace_user_permission_dict = group_by (workspace_user_permission_list ,
93
- key = lambda item : item .workspace_id )
94
- permission_list = get_default_permission_list_by_role (RoleConstants [user .role ])
95
- permission_list = [
96
- get_workspace_resource_permission_list (permission , 'default' , workspace_user_permission_dict ) for
97
- permission
98
- in permission_list ]
99
- # 将二维数组扁平为一维
100
- permission_list = reduce (lambda x , y : [* x , * y ], permission_list , [])
167
+ role_permission_mapping_list = get_default_role_permission_mapping_list ()
168
+ role_permission_mapping_dict = group_by (role_permission_mapping_list , lambda item : item .role_id )
169
+ workspace_user_role_mapping_list = get_default_workspace_user_role_mapping_list ([user .role ])
170
+ workspace_user_role_mapping_dict = group_by (workspace_user_role_mapping_list ,
171
+ lambda item : item .role_id )
172
+ # 资源权限
173
+ workspace_resource_permission_list = get_workspace_resource_permission_list (
174
+ workspace_user_resource_permission_list ,
175
+ role_permission_mapping_dict ,
176
+ workspace_user_role_mapping_dict )
177
+
178
+ workspace_permission_list = get_workspace_permission_list (role_permission_mapping_dict ,
179
+ workspace_user_role_mapping_list )
180
+ # 系统权限
181
+ system_permission_list = [role_permission_mapping .permission_id for role_permission_mapping in
182
+ role_permission_mapping_list ]
183
+ # 合并权限
184
+ permission_list = system_permission_list + workspace_permission_list + workspace_resource_permission_list
101
185
cache .set (key , permission_list , version = version )
102
186
return permission_list
103
187
0 commit comments