Skip to content

Commit 35d86c6

Browse files
authored
feat: workspace manage role (#3333)
1 parent 7f1f9cc commit 35d86c6

File tree

3 files changed

+23
-8
lines changed

3 files changed

+23
-8
lines changed

apps/common/auth/handle/impl/user_token.py

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,16 +39,20 @@ def get_permission(permission_id):
3939
return f"{permission_id}"
4040

4141

42-
def get_workspace_permission(permission_id, workspace_id):
42+
def get_workspace_permission(permission_id, workspace_id, role=None):
4343
"""
4444
获取工作空间权限字符串
4545
@param permission_id: 权限id
4646
@param workspace_id: 工作空间id
47+
@param role: 角色
4748
@return:
4849
"""
4950
if isinstance(permission_id, PermissionConstants):
5051
permission_id = permission_id.value
51-
return f"{permission_id}:/WORKSPACE/{workspace_id}"
52+
if role and role.type == RoleConstants.WORKSPACE_MANAGE.value.__str__():
53+
return [f"{permission_id}:/WORKSPACE/{workspace_id}:ROLE/{role.type}",
54+
f"{permission_id}:/WORKSPACE/{workspace_id}"]
55+
return [f"{permission_id}:/WORKSPACE/{workspace_id}"]
5256

5357

5458
def get_role_permission(role, workspace_id):
@@ -63,18 +67,20 @@ def get_role_permission(role, workspace_id):
6367
return f"{role}:/WORKSPACE/{workspace_id}"
6468

6569

66-
def get_workspace_permission_list(role_permission_mapping_dict, workspace_user_role_mapping_list):
70+
def get_workspace_permission_list(role_permission_mapping_dict, workspace_user_role_mapping_list, role_model_dict):
6771
"""
6872
获取工作空间下所有的权限
6973
@param role_permission_mapping_dict: 角色权限关联字典
7074
@param workspace_user_role_mapping_list: 工作空间用户角色关联列表
75+
@param role_model_dict: 角色字典
7176
@return: 工作空间下的权限
7277
"""
7378
workspace_permission_list = [
74-
[get_workspace_permission(role_permission_mapping.permission_id, w_u_r.workspace_id) for role_permission_mapping
79+
[get_workspace_permission(role_permission_mapping.permission_id, w_u_r.workspace_id,
80+
role_model_dict.get(w_u_r.role_id, None)) for role_permission_mapping
7581
in
7682
role_permission_mapping_dict.get(w_u_r.role_id, [])] for w_u_r in workspace_user_role_mapping_list]
77-
return reduce(lambda x, y: [*x, *y], workspace_permission_list, [])
83+
return reduce(lambda x, y: [*x, *y], reduce(lambda x, y: [*x, *y], workspace_permission_list, []), [])
7884

7985

8086
def get_workspace_resource_permission_list(
@@ -156,6 +162,10 @@ def get_permission_list(user,
156162
# 获取角色权限映射数据
157163
role_permission_mapping_list = QuerySet(role_permission_mapping_model).filter(
158164
role_id__in=role_id_list)
165+
role_model_list = QuerySet(role_model).filter(id__in=role_id_list)
166+
167+
role_model_dict = {role_model.id: role_model for role_model in role_model_list}
168+
159169
role_permission_mapping_dict = group_by(
160170
role_permission_mapping_list, lambda item: item.role_id)
161171

@@ -169,7 +179,7 @@ def get_permission_list(user,
169179
workspace_user_role_mapping_dict)
170180

171181
workspace_permission_list = get_workspace_permission_list(role_permission_mapping_dict,
172-
workspace_user_role_mapping_list)
182+
workspace_user_role_mapping_list, role_model_dict)
173183
# 系统权限
174184
system_permission_list = [role_permission_mapping.permission_id for role_permission_mapping in
175185
role_permission_mapping_list]
@@ -193,7 +203,7 @@ def get_permission_list(user,
193203
workspace_user_role_mapping_dict)
194204

195205
workspace_permission_list = get_workspace_permission_list(role_permission_mapping_dict,
196-
workspace_user_role_mapping_list)
206+
workspace_user_role_mapping_list, {})
197207
# 系统权限
198208
system_permission_list = [role_permission_mapping.permission_id for role_permission_mapping in
199209
role_permission_mapping_list if

apps/common/constants/permission_constants.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1104,6 +1104,11 @@ def get_workspace_permission(self):
11041104
resource_path=
11051105
f"/WORKSPACE/{kwargs.get('workspace_id')}")
11061106

1107+
def get_workspace_permission_workspace_manage_role(self):
1108+
return lambda r, kwargs: Permission(group=self.value.group, operate=self.value.operate,
1109+
resource_path=
1110+
f"/WORKSPACE/{kwargs.get('workspace_id')}:ROLE/{RoleConstants.WORKSPACE_MANAGE.value.__str__()}")
1111+
11071112
def __eq__(self, other):
11081113
if isinstance(other, PermissionConstants):
11091114
return other == self

apps/users/serializers/user.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ def is_workspace_manage(user_id: str, workspace_id: str):
6666
if is_x_pack_ee:
6767
return QuerySet(workspace_user_role_mapping_model).select_related('role', 'user').filter(
6868
workspace_id=workspace_id, user_id=user_id,
69-
role=RoleConstants.WORKSPACE_MANAGE.value.__str__()).exists()
69+
role__type=RoleConstants.WORKSPACE_MANAGE.value.__str__()).exists()
7070
return QuerySet(User).filter(id=user_id, role=RoleConstants.ADMIN.value.__str__()).exists()
7171

7272

0 commit comments

Comments
 (0)