Skip to content

Commit aae70a8

Browse files
committed
feat: add extends role
1 parent 8e29562 commit aae70a8

File tree

3 files changed

+35
-9
lines changed

3 files changed

+35
-9
lines changed

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

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -219,10 +219,26 @@ def get_permission_list(user,
219219
return permission_list
220220

221221

222-
def reset_workspace_role(role, workspace_id):
223-
if role == RoleConstants.ADMIN.value.__str__() or workspace_id is None:
224-
return role
225-
return f"{role}:/WORKSPACE/{workspace_id}"
222+
system_role_list = [RoleConstants.ADMIN.value.name, RoleConstants.WORKSPACE_MANAGE.value.name,
223+
RoleConstants.USER.value.name]
224+
225+
system_role = RoleConstants.ADMIN.value.name
226+
227+
228+
def reset_workspace_role(role_id, workspace_id, role_dict):
229+
if system_role_list.__contains__(role_id):
230+
if system_role == role_id:
231+
return role_id
232+
else:
233+
return f"{role_id}:/WORKSPACE/{workspace_id}"
234+
else:
235+
r = role_dict.get(role_id)
236+
if r is not None:
237+
return ''
238+
role_type = role_dict.get(role_id).type
239+
if system_role == role_type:
240+
return RoleConstants.EXTENDS_ADMIN.value.name
241+
return f"EXTENDS_{role_type}:/WORKSPACE/{workspace_id}"
226242

227243

228244
def get_role_list(user,
@@ -242,11 +258,14 @@ def get_role_list(user,
242258
if is_query_model:
243259
# 获取工作空间 用户 角色映射数据
244260
workspace_user_role_mapping_list = QuerySet(workspace_user_role_mapping_model).filter(user_id=user.id)
245-
role_list = [reset_workspace_role(workspace_user_role_mapping.role_id,
246-
workspace_user_role_mapping.workspace_id)
247-
for
248-
workspace_user_role_mapping in
249-
workspace_user_role_mapping_list]
261+
role_list = QuerySet(role_model).filter(id__in=[wurm.role_id for wurm in workspace_user_role_mapping_list])
262+
role_dict = {r.id: r for r in role_list}
263+
role_list = list(set([reset_workspace_role(workspace_user_role_mapping.role_id,
264+
workspace_user_role_mapping.workspace_id,
265+
role_dict)
266+
for
267+
workspace_user_role_mapping in
268+
workspace_user_role_mapping_list]))
250269
cache.set(key, workspace_list, version=version)
251270
return role_list
252271
else:

apps/common/constants/permission_constants.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,10 @@ class RoleConstants(Enum):
255255
CHAT_ANONYMOUS_USER = Role("CHAT_ANONYMOUS_USER", "对话匿名用户", RoleGroup.CHAT_USER)
256256
CHAT_USER = Role("CHAT_USER", "对话用户", RoleGroup.CHAT_USER)
257257

258+
EXTENDS_ADMIN = Role("EXTENDS_ADMIN", '继承超级管理员', RoleGroup.SYSTEM_USER)
259+
EXTENDS_WORKSPACE_MANAGE = Role("EXTENDS_WORKSPACE_MANAGE", "继承工作空间管理员", RoleGroup.CHAT_USER)
260+
EXTENDS_USER = Role("EXTENDS_USER", "继承普通用户", RoleGroup.CHAT_USER)
261+
258262
def get_workspace_role(self):
259263
return lambda r, kwargs: Role(name=self.value.name,
260264
decs=self.value.decs,

ui/src/utils/permission/data.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,9 @@ const RoleConst = {
253253
ADMIN: new Role('ADMIN'),
254254
WORKSPACE_MANAGE: new Role('WORKSPACE_MANAGE'),
255255
USER: new Role('USER'),
256+
EXTENDS_ADMIN: new Role('EXTENDS_ADMIN'),
257+
EXTENDS_WORKSPACE_MANAGE: new Role('EXTENDS_WORKSPACE_MANAGE'),
258+
EXTENDS_USER: new Role('EXTENDS_USER'),
256259
}
257260
const EditionConst = {
258261
IS_PE: new Edition('X-PACK-PE'),

0 commit comments

Comments
 (0)