@@ -202,13 +202,14 @@ def _get_user_roles(user_ids):
202202 user_role_relations = (
203203 user_role_relation_model .objects
204204 .filter (user_id__in = user_ids )
205+ .distinct ('user_id' , 'role_id' ) # 确保每个用户每个角色只返回一次
205206 .select_related ('role' ) # 预加载外键数据
206207 )
207208
208209 # 构建用户ID到角色名称列表的映射
209210 user_role_mapping = defaultdict (list )
210211 for relation in user_role_relations :
211- user_role_mapping [relation .user_id ].append (relation .role .role_name )
212+ user_role_mapping [str ( relation .user_id ) ].append (relation .role .role_name )
212213
213214 return user_role_mapping
214215
@@ -218,7 +219,7 @@ def _get_user_roles(user_ids):
218219
219220 # 将角色信息添加回用户数据中
220221 for user in result ['records' ]:
221- user ['role' ] = user_role_mapping .get (user ['id' ], [])
222+ user ['role' ] = user_role_mapping .get (str ( user ['id' ]) , [])
222223 return result
223224
224225 @valid_license (model = User , count = 2 ,
@@ -486,22 +487,15 @@ def get_all_user_list(self):
486487
487488def update_user_role (instance , user ):
488489 workspace_user_role_mapping_model = DatabaseModelManage .get_model ("workspace_user_role_mapping" )
489- role_setting_model = DatabaseModelManage .get_model ("role_model" )
490490 if workspace_user_role_mapping_model :
491491 role_setting = instance .get ('role_setting' )
492492 workspace_user_role_mapping_model .objects .filter (user_id = user .id ).delete ()
493493 relations = set ()
494494 for item in role_setting :
495- for role_id , workspace_ids in item .items ():
496- relations .update (set (product ([role_id ], workspace_ids )))
497-
498- role_ids = {role_id for item in role_setting for role_id in item }
499- role_ids_is_system = role_setting_model .objects .filter (id__in = role_ids ,
500- type = RoleConstants .ADMIN .name ).values_list (
501- 'id' , flat = True )
502- if role_ids_is_system :
503- relations = {(role_id , 'SYSTEM' ) if role_id in role_ids_is_system else (role_id , workspace_id )
504- for role_id , workspace_id in relations }
495+ role_id = item ['role_id' ]
496+ workspace_ids = item ['workspace_ids' ] if item ['workspace_ids' ] else ['None' ]
497+ for workspace_id in workspace_ids :
498+ relations .add ((role_id , workspace_id ))
505499 for role_id , workspace_id in relations :
506500 workspace_user_role_mapping_model .objects .create (
507501 id = uuid .uuid7 (),
0 commit comments