@@ -44,10 +44,13 @@ class PermissionSerializer(serializers.Serializer):
4444class UserResourcePermissionItemResponse (serializers .Serializer ):
4545 id = serializers .UUIDField (required = True , label = "主键id" )
4646 name = serializers .CharField (required = True , label = "资源名称" )
47- auth_target_type = serializers .ChoiceField (required = True , choices = AuthTargetType . choices , label = "授权资源" )
47+ auth_target_type = serializers .CharField (required = True , label = "授权资源" )
4848 user_id = serializers .UUIDField (required = True , label = "用户id" )
49- auth_type = serializers .ChoiceField (required = True , choices = ResourceAuthType .choices , label = "授权类型" )
50- permission = PermissionSerializer ()
49+ icon = serializers .CharField (required = True , label = "资源图标" )
50+ auth_type = serializers .CharField (required = True , label = "授权类型" )
51+ permission = serializers .ChoiceField (required = False , allow_null = True , allow_blank = True ,
52+ choices = ['NOT_AUTH' , 'MANAGE' , 'VIEW' , 'ROLE' ],
53+ label = _ ('permission' ))
5154
5255
5356class UserResourcePermissionResponse (serializers .Serializer ):
@@ -56,8 +59,9 @@ class UserResourcePermissionResponse(serializers.Serializer):
5659
5760class UpdateTeamMemberItemPermissionSerializer (serializers .Serializer ):
5861 target_id = serializers .CharField (required = True , label = _ ('target id' ))
59- auth_type = serializers .ChoiceField (required = True , choices = ResourceAuthType .choices , label = "授权类型" )
60- permission = PermissionSerializer (required = True , many = False )
62+ permission = serializers .ChoiceField (required = False , allow_null = True , allow_blank = True ,
63+ choices = ['NOT_AUTH' , 'MANAGE' , 'VIEW' , 'ROLE' ],
64+ label = _ ('permission' ))
6165
6266
6367class UpdateUserResourcePermissionRequest (serializers .Serializer ):
@@ -90,19 +94,38 @@ def is_valid(self, *, auth_target_type=None, workspace_id=None, raise_exception=
9094 'APPLICATION' : 'get_application_user_resource_permission.sql'
9195}
9296
97+ class UserResourcePermissionUserListRequest (serializers .Serializer ):
98+ name = serializers .CharField (required = False , allow_null = True , allow_blank = True , label = _ ('resource name' ))
99+ permission = serializers .ChoiceField (required = False , allow_null = True , allow_blank = True ,choices = ['NOT_AUTH' , 'MANAGE' , 'VIEW' , 'ROLE' ],
100+ label = _ ('permission' ))
93101
94102class UserResourcePermissionSerializer (serializers .Serializer ):
95103 workspace_id = serializers .CharField (required = True , label = _ ('workspace id' ))
96104 user_id = serializers .CharField (required = True , label = _ ('user id' ))
97105 auth_target_type = serializers .CharField (required = True , label = _ ('resource' ))
98106
99- def get_queryset (self ):
107+ def get_queryset (self , instance ):
108+ resource_query_set = QuerySet (
109+ model = get_dynamics_model ({
110+ 'name' : models .CharField (),
111+ "permission" : models .CharField (),
112+ }))
113+ name = instance .get ('name' )
114+ permission = instance .get ('permission' )
115+
116+ if name :
117+ resource_query_set = resource_query_set .filter (name__contains = name )
118+ if permission :
119+ resource_query_set = resource_query_set .filter (
120+ permission = None if instance .get ('permission' ) == 'NOT_AUTH' else instance .get ('permission' ))
121+
100122 return {
101123 'query_set' : QuerySet (m_map .get (self .data .get ('auth_target_type' ))).filter (
102124 workspace_id = self .data .get ('workspace_id' )),
103125 'workspace_user_resource_permission_query_set' : QuerySet (WorkspaceUserResourcePermission ).filter (
104126 workspace_id = self .data .get ('workspace_id' ), user = self .data .get ('user_id' ),
105- auth_target_type = self .data .get ('auth_target_type' ))
127+ auth_target_type = self .data .get ('auth_target_type' )),
128+ 'resource_query_set' : resource_query_set
106129 }
107130
108131 def is_auth (self , resource_id : str ):
@@ -184,56 +207,56 @@ def auth_resource(self, resource_id: str):
184207 cache .delete (key , version = version )
185208 return True
186209
187- def list (self , user , with_valid = True ):
210+ def list (self , instance , user , with_valid = True ):
188211 if with_valid :
189212 self .is_valid (raise_exception = True )
213+ UserResourcePermissionUserListRequest (data = instance ).is_valid (raise_exception = True )
190214 workspace_id = self .data .get ("workspace_id" )
191215 user_id = self .data .get ("user_id" )
192216 # 用户权限列表
193- user_resource_permission_list = native_search (self .get_queryset (), get_file_content (
217+ user_resource_permission_list = native_search (self .get_queryset (instance ), get_file_content (
194218 os .path .join (PROJECT_DIR , "apps" , "system_manage" , 'sql' , sql_map .get (self .data .get ('auth_target_type' )))))
195- workspace_user_role_mapping_model = DatabaseModelManage .get_model ("workspace_user_role_mapping" )
196- workspace_model = DatabaseModelManage .get_model ("workspace_model" )
197- if workspace_user_role_mapping_model and workspace_model :
198- workspace_user_role_mapping_list = QuerySet (workspace_user_role_mapping_model ).filter (user_id = user_id ,
199- workspace_id = workspace_id )
200- else :
201- workspace_user_role_mapping_list = get_default_workspace_user_role_mapping_list ([user .role ])
202- is_workspace_manage = any (
203- [workspace_user_role_mapping for workspace_user_role_mapping in workspace_user_role_mapping_list if
204- workspace_user_role_mapping .role_id == RoleConstants .WORKSPACE_MANAGE .value ])
205- # 如果当前用户是当前工作空间管理员那么就拥有所有权限
206- if is_workspace_manage :
207- user_resource_permission_list = list (
208- map (lambda row : {** row ,
209- 'permission' : {ResourcePermission .VIEW .value : True ,
210- ResourcePermission .MANAGE .value : True ,
211- ResourcePermissionRole .ROLE .value : True }},
212- user_resource_permission_list ))
213- return group_by ([{** user_resource_permission , 'permission' : {
214- permission : True if user_resource_permission .get ('permission_list' ).__contains__ (permission ) else False for
215- permission in
216- [ResourcePermission .VIEW .value , ResourcePermission .MANAGE .value ,
217- ResourcePermissionRole .ROLE .value ]}}
218- for user_resource_permission in user_resource_permission_list ],
219- key = lambda item : item .get ('auth_target_type' ))
219+
220+ return [{** user_resource_permission }
221+ for user_resource_permission in user_resource_permission_list ]
222+
223+
224+ def page (self , instance , current_page : int , page_size : int ,user , with_valid = True ):
225+ if with_valid :
226+ self .is_valid (raise_exception = True )
227+ UserResourcePermissionUserListRequest (data = instance ).is_valid (raise_exception = True )
228+ workspace_id = self .data .get ("workspace_id" )
229+ user_id = self .data .get ("user_id" )
230+ # 用户对应的资源权限分页列表
231+ user_resource_permission_page_list = native_page_search (current_page ,page_size ,self .get_queryset (instance ),get_file_content (
232+ os .path .join (PROJECT_DIR , "apps" , "system_manage" , 'sql' , sql_map .get (self .data .get ('auth_target_type' )))
233+ ))
234+
235+ return user_resource_permission_page_list
236+
220237
221238 def edit (self , instance , user , with_valid = True ):
222239 if with_valid :
223240 self .is_valid (raise_exception = True )
224- UpdateUserResourcePermissionRequest (data = instance ).is_valid (raise_exception = True ,
241+ UpdateUserResourcePermissionRequest (data = { 'user_resource_permission_list' : instance } ).is_valid (raise_exception = True ,
225242 auth_target_type = self .data .get (
226243 'auth_target_type' ),
227244 workspace_id = self .data .get ('workspace_id' ))
228245 workspace_id = self .data .get ("workspace_id" )
229246 user_id = self .data .get ("user_id" )
230247 update_list = []
231248 save_list = []
232- user_resource_permission_list = instance . get ( 'user_resource_permission_list' )
249+ targets = [ item [ 'target_id' ] for item in instance ]
233250 QuerySet (WorkspaceUserResourcePermission ).filter (
234- workspace_id = workspace_id , user_id = user_id , auth_target_type = self .data .get ('auth_target_type' )).delete ()
251+ workspace_id = workspace_id ,
252+ user_id = user_id ,
253+ auth_target_type = self .data .get ('auth_target_type' ),
254+ target__in = targets
255+ ).delete ()
235256 workspace_user_resource_permission_exist_list = []
236- for user_resource_permission in user_resource_permission_list :
257+ for user_resource_permission in instance :
258+ permission = user_resource_permission ['permission' ]
259+ auth_type , permission_list = permission_map [permission ]
237260 exist_list = [user_resource_permission_exist for user_resource_permission_exist in
238261 workspace_user_resource_permission_exist_list if
239262 user_resource_permission .get ('target_id' ) == str (user_resource_permission_exist .target )]
@@ -245,14 +268,10 @@ def edit(self, instance, user, with_valid=True):
245268 else :
246269 save_list .append (WorkspaceUserResourcePermission (target = user_resource_permission .get ('target_id' ),
247270 auth_target_type = self .data .get ('auth_target_type' ),
248- permission_list = [key for key in
249- user_resource_permission .get (
250- 'permission' ).keys () if
251- user_resource_permission .get (
252- 'permission' ).get (key )],
271+ permission_list = permission_list ,
253272 workspace_id = workspace_id ,
254273 user_id = user_id ,
255- auth_type = user_resource_permission . get ( ' auth_type' ) ))
274+ auth_type = auth_type ))
256275 # 批量更新
257276 QuerySet (WorkspaceUserResourcePermission ).bulk_update (update_list , ['permission_list' , 'auth_type' ]) if len (
258277 update_list ) > 0 else None
@@ -261,13 +280,13 @@ def edit(self, instance, user, with_valid=True):
261280 version = Cache_Version .PERMISSION_LIST .get_version ()
262281 key = Cache_Version .PERMISSION_LIST .get_key (user_id = user_id )
263282 cache .delete (key , version = version )
264- return True
283+ return instance
265284
266285
267286class ResourceUserPermissionUserListRequest (serializers .Serializer ):
268287 nick_name = serializers .CharField (required = False , allow_null = True , allow_blank = True , label = _ ('workspace id' ))
269288 username = serializers .CharField (required = False , allow_null = True , allow_blank = True , label = _ ('workspace id' ))
270- permission = serializers .ChoiceField (required = True , choices = ['NOT_AUTH' , 'MANAGE' , 'VIEW' , 'ROLE' ],
289+ permission = serializers .ChoiceField (required = False , allow_null = True , allow_blank = True , choices = ['NOT_AUTH' , 'MANAGE' , 'VIEW' , 'ROLE' ],
271290 label = _ ('permission' ))
272291
273292
@@ -381,4 +400,4 @@ def edit(self, instance, with_valid=True):
381400 for user_id in users_id :
382401 key = Cache_Version .PERMISSION_LIST .get_key (user_id = user_id )
383402 cache .delete (key , version = version )
384- return True
403+ return instance
0 commit comments