Skip to content

Commit 0935cb2

Browse files
committed
fix: Workspace permission table
1 parent ea8ad1d commit 0935cb2

File tree

3 files changed

+78
-14
lines changed

3 files changed

+78
-14
lines changed

apps/folders/serializers/folder.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
import uuid_utils.compat as uuid
44
from django.db import transaction
5-
from django.db.models import QuerySet, Q, Func, F
5+
from django.db.models import QuerySet, Q, Func, F, TextField
6+
from django.db.models.functions import Cast
67
from django.utils.translation import gettext_lazy as _
78
from rest_framework import serializers
89

@@ -224,7 +225,9 @@ def delete(self):
224225
nodes = Folder.objects.filter(id=self.data.get('id')).get_descendants(include_self=True)
225226
for node in nodes:
226227
# 删除相关的资源
227-
source_ids = Source.objects.filter(folder_id=node.id).values_list('id', flat=True)
228+
source_ids = (Source.objects.filter(folder_id=node.id)
229+
.annotate(id_str=Cast('id', TextField()))
230+
.values_list('id_str', flat=True))
228231
# 检查文件夹是否存在未授权当前用户的资源
229232
auth_list = QuerySet(WorkspaceUserResourcePermission).filter(
230233
Q(workspace_id=self.data.get('workspace_id')) &

apps/system_manage/serializers/user_resource_permission.py

Lines changed: 38 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -333,13 +333,17 @@ class ResourceUserPermissionSerializer(serializers.Serializer):
333333
'TOOL': Tool
334334
}
335335

336-
def get_queryset(self, instance):
336+
def get_queryset(self, instance, is_x_pack_ee: bool):
337337

338338
user_query_set = QuerySet(model=get_dynamics_model({
339339
'nick_name': models.CharField(),
340340
'username': models.CharField(),
341341
"permission": models.CharField(),
342-
"id": models.UUIDField(),
342+
"u.id": models.UUIDField(),
343+
"role": models.CharField(),
344+
"role_setting.type": models.CharField(),
345+
"user_role_relation.workspace_id": models.CharField(),
346+
343347
}))
344348
nick_name = instance.get('nick_name')
345349
username = instance.get('username')
@@ -368,9 +372,14 @@ def get_queryset(self, instance):
368372
workspace_user_role_mapping_model = DatabaseModelManage.get_model("workspace_user_role_mapping")
369373
if workspace_user_role_mapping_model:
370374
user_query_set = user_query_set.filter(
371-
id__in=QuerySet(workspace_user_role_mapping_model).filter(
372-
workspace_id=self.data.get('workspace_id')).values("user_id"))
373-
375+
**{"u.id__in": QuerySet(workspace_user_role_mapping_model).filter(
376+
workspace_id=self.data.get('workspace_id')).values("user_id")})
377+
if is_x_pack_ee:
378+
user_query_set = user_query_set.filter(
379+
**{'role_setting.type': "USER", 'user_role_relation.workspace_id': self.data.get('workspace_id')})
380+
else:
381+
user_query_set = user_query_set.filter(
382+
**{'role': "USER"})
374383
return {
375384
'workspace_user_resource_permission_query_set': workspace_user_resource_permission_query_set,
376385
'user_query_set': user_query_set
@@ -380,22 +389,38 @@ def list(self, instance, with_valid=True):
380389
if with_valid:
381390
self.is_valid(raise_exception=True)
382391
ResourceUserPermissionUserListRequest(data=instance).is_valid(raise_exception=True)
392+
is_x_pack_ee = self.is_x_pack_ee()
383393
# 资源的用户授权列表
384-
resource_user_permission_list = native_search(self.get_queryset(instance), get_file_content(
385-
os.path.join(PROJECT_DIR, "apps", "system_manage", 'sql', 'get_resource_user_permission_detail.sql')
394+
resource_user_permission_list = native_search(self.get_queryset(instance, is_x_pack_ee), get_file_content(
395+
os.path.join(PROJECT_DIR, "apps", "system_manage",
396+
'sql',
397+
('get_resource_user_permission_detail_ee.sql' if is_x_pack_ee else
398+
'get_resource_user_permission_detail.sql')
399+
)
386400
))
387401
return resource_user_permission_list
388402

403+
@staticmethod
404+
def is_x_pack_ee():
405+
workspace_user_role_mapping_model = DatabaseModelManage.get_model("workspace_user_role_mapping")
406+
role_permission_mapping_model = DatabaseModelManage.get_model("role_permission_mapping_model")
407+
return workspace_user_role_mapping_model is not None and role_permission_mapping_model is not None
408+
389409
def page(self, instance, current_page: int, page_size: int, with_valid=True):
390410
if with_valid:
391411
self.is_valid(raise_exception=True)
392412
ResourceUserPermissionUserListRequest(data=instance).is_valid(raise_exception=True)
393413
# 分页列表
394-
resource_user_permission_page_list = native_page_search(current_page, page_size, self.get_queryset(instance),
414+
is_x_pack_ee = self.is_x_pack_ee()
415+
resource_user_permission_page_list = native_page_search(current_page, page_size,
416+
self.get_queryset(instance, is_x_pack_ee),
395417
get_file_content(
396418
os.path.join(PROJECT_DIR, "apps", "system_manage",
397419
'sql',
398-
'get_resource_user_permission_detail.sql')
420+
(
421+
'get_resource_user_permission_detail_ee.sql' if is_x_pack_ee else
422+
'get_resource_user_permission_detail.sql')
423+
)
399424
))
400425
return resource_user_permission_page_list
401426

@@ -407,9 +432,10 @@ def get_has_manage_permission_resource_under_folders(self, current_user_id, fold
407432
resource_model = self.RESOURCE_MODEL_MAP[auth_target_type]
408433

409434
if workspace_manage:
410-
current_user_managed_resources_ids = QuerySet(resource_model).filter(workspace_id=workspace_id, folder__in=folder_ids).annotate(
411-
id_str=Cast('id', TextField())
412-
).values_list("id_str", flat=True)
435+
current_user_managed_resources_ids = QuerySet(resource_model).filter(workspace_id=workspace_id,
436+
folder__in=folder_ids).annotate(
437+
id_str=Cast('id', TextField())
438+
).values_list("id_str", flat=True)
413439
else:
414440
current_user_managed_resources_ids = QuerySet(WorkspaceUserResourcePermission).filter(
415441
workspace_id=workspace_id, user_id=current_user_id, auth_target_type=auth_target_type,
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
SELECT
2+
distinct(u.id),
3+
u.id,
4+
u.nick_name,
5+
u.username,
6+
case
7+
when
8+
wurp."permission" is null then 'NOT_AUTH'
9+
else wurp."permission"
10+
end
11+
FROM
12+
public."user" u
13+
LEFT JOIN (
14+
SELECT
15+
user_id ,
16+
(case
17+
when auth_type = 'ROLE'
18+
and 'ROLE' = any( permission_list) then 'ROLE'
19+
when auth_type = 'RESOURCE_PERMISSION_GROUP'
20+
and 'MANAGE'= any(permission_list) then 'MANAGE'
21+
when auth_type = 'RESOURCE_PERMISSION_GROUP'
22+
and 'VIEW' = any( permission_list) then 'VIEW'
23+
else null
24+
end) as "permission"
25+
FROM
26+
workspace_user_resource_permission
27+
${workspace_user_resource_permission_query_set}
28+
) wurp
29+
ON
30+
u.id = wurp.user_id
31+
left join user_role_relation user_role_relation
32+
on user_role_relation.user_id = u.id
33+
left join role_setting role_setting
34+
on role_setting.id = user_role_relation.role_id
35+
${user_query_set}

0 commit comments

Comments
 (0)