@@ -198,28 +198,46 @@ def _get_user_roles(user_ids):
198198 if not (role_model and user_role_relation_model ):
199199 return {}
200200
201+ # 获取所有相关角色关系,并预加载角色信息
201202 # 获取所有相关角色关系,并预加载角色信息
202203 user_role_relations = (
203204 user_role_relation_model .objects
204205 .filter (user_id__in = user_ids )
205- .distinct ( 'user_id' , 'role_id' ) # 确保每个用户每个角色只返回一次
206- .select_related ( 'role' ) # 预加载外键数据
206+ .select_related ( 'role' )
207+ .distinct ( 'user_id' , 'role_id' , 'workspace_id' ) # 确保组合唯一性
207208 )
208209
209210 # 构建用户ID到角色名称列表的映射
210211 user_role_mapping = defaultdict (list )
212+ # 构建用户ID到角色ID与工作空间ID映射
213+ user_role_setting_mapping = defaultdict (lambda : defaultdict (list ))
214+
211215 for relation in user_role_relations :
212- user_role_mapping [str (relation .user_id )].append (relation .role .role_name )
216+ user_id = str (relation .user_id )
217+ role_id = relation .role_id
218+ workspace_id = relation .workspace_id
219+
220+ user_role_mapping [user_id ].append (relation .role .role_name )
221+ user_role_setting_mapping [user_id ][role_id ].append (workspace_id )
222+
223+ # 转换为所需的结构
224+ result_user_role_setting_mapping = {
225+ user_id : [{"role_id" : role_id , "workspace_ids" : workspace_ids }
226+ for role_id , workspace_ids in roles .items ()]
227+ for user_id , roles in user_role_setting_mapping .items ()
228+ }
213229
214- return user_role_mapping
230+ return user_role_mapping , result_user_role_setting_mapping
215231
216232 if role_model and user_role_relation_model :
217233 user_ids = [user ['id' ] for user in result ['records' ]]
218- user_role_mapping = _get_user_roles (user_ids )
234+ user_role_mapping , user_role_setting_mapping = _get_user_roles (user_ids )
219235
220236 # 将角色信息添加回用户数据中
221237 for user in result ['records' ]:
222- user ['role' ] = user_role_mapping .get (str (user ['id' ]), [])
238+ user_id = str (user ['id' ])
239+ user ['role' ] = user_role_mapping .get (user_id , [])
240+ user ['role_setting' ] = user_role_setting_mapping .get (user_id , [])
223241 return result
224242
225243 @valid_license (model = User , count = 2 ,
@@ -454,7 +472,7 @@ def get_user_members(self, workspace_id):
454472 'roles' : [relation .role .role_name ]
455473 }
456474 else :
457- user_dict [user_id ]['roles' ].append (relation .role .name )
475+ user_dict [user_id ]['roles' ].append (relation .role .role_name )
458476
459477 # 将字典值转换为列表形式
460478 return list (user_dict .values ())
@@ -489,6 +507,8 @@ def update_user_role(instance, user):
489507 workspace_user_role_mapping_model = DatabaseModelManage .get_model ("workspace_user_role_mapping" )
490508 if workspace_user_role_mapping_model :
491509 role_setting = instance .get ('role_setting' )
510+ if not role_setting :
511+ return
492512 workspace_user_role_mapping_model .objects .filter (user_id = user .id ).delete ()
493513 relations = set ()
494514 for item in role_setting :
0 commit comments