Skip to content

Commit a6082c9

Browse files
committed
fix: Folder_auth_permission_migrate
1 parent 192d9b3 commit a6082c9

File tree

2 files changed

+62
-7
lines changed

2 files changed

+62
-7
lines changed

apps/folders/serializers/folder.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -296,12 +296,13 @@ def get_folder_tree(self,
296296
if name is not None:
297297
base_q &= Q(name__contains=name)
298298
if not workspace_manage:
299-
base_q &= Q(id__in=WorkspaceUserResourcePermission.objects.filter(user_id=current_user.id,
300-
auth_target_type=self.data.get('source'),
301-
workspace_id=self.data.get('workspace_id'),
302-
permission_list__contains=['VIEW'])
303-
.values_list(
304-
'target', flat=True))
299+
base_q &= (Q(id__in=WorkspaceUserResourcePermission.objects.filter(user_id=current_user.id,
300+
auth_target_type=self.data.get('source'),
301+
workspace_id=self.data.get(
302+
'workspace_id'),
303+
permission_list__contains=['VIEW'])
304+
.values_list(
305+
'target', flat=True)) | Q(id=self.data.get('workspace_id')))
305306

306307
nodes = Folder.objects.filter(base_q).get_cached_trees()
307308

apps/system_manage/migrations/0003_alter_workspaceuserresourcepermission_target.py

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,63 @@
11
# Generated by Django 5.2.6 on 2025-10-11 02:54
2+
from functools import reduce
23

34
from django.db import migrations, models
5+
from django.db.models import QuerySet
46

7+
from common.constants.permission_constants import WorkspaceUserRoleMapping
8+
from common.utils.common import group_by
9+
from application.models import ApplicationFolder
10+
from knowledge.models import KnowledgeFolder
11+
from tools.models import ToolFolder
12+
from system_manage.models import WorkspaceUserResourcePermission
13+
from users.models import User
514

6-
class Migration(migrations.Migration):
715

16+
def delete_auth(folder_model):
17+
QuerySet(WorkspaceUserResourcePermission).filter(target__in=QuerySet(folder_model).values_list('id')).delete()
18+
19+
20+
def get_workspace_user_resource_permission_list(auth_target_type, workspace_user_role_mapping_model_workspace_dict,
21+
folder_model):
22+
return reduce(lambda x, y: [*x, *y], [
23+
[WorkspaceUserResourcePermission(target=f.id, workspace_id=f.workspace_id, user_id=wurm.user_id,
24+
auth_target_type=auth_target_type, auth_type="RESOURCE_PERMISSION_GROUP",
25+
permission_list=['VIEW']) for wurm in
26+
workspace_user_role_mapping_model_workspace_dict.get(f.workspace_id, [])] for f in
27+
QuerySet(folder_model).all()], [])
28+
29+
30+
def auth_folder(apps, schema_editor):
31+
from common.database_model_manage.database_model_manage import DatabaseModelManage
32+
DatabaseModelManage.init()
33+
workspace_user_role_mapping_model = DatabaseModelManage.get_model("workspace_user_role_mapping")
34+
if workspace_user_role_mapping_model is None:
35+
workspace_user_role_mapping_model_workspace_dict = {
36+
'default': [WorkspaceUserRoleMapping('default', '', u.id) for u in QuerySet(User).all()]}
37+
else:
38+
workspace_user_role_mapping_model_workspace_dict = group_by(
39+
[v for v in {str(wurm.user_id) + str(wurm.workspace_id): wurm for wurm in
40+
QuerySet(workspace_user_role_mapping_model)}.values()],
41+
lambda item: item.workspace_id)
42+
43+
workspace_user_resource_permission_list = get_workspace_user_resource_permission_list("APPLICATION",
44+
workspace_user_role_mapping_model_workspace_dict,
45+
ApplicationFolder)
46+
47+
workspace_user_resource_permission_list += get_workspace_user_resource_permission_list("TOOL",
48+
workspace_user_role_mapping_model_workspace_dict,
49+
ToolFolder)
50+
51+
workspace_user_resource_permission_list += get_workspace_user_resource_permission_list("KNOWLEDGE",
52+
workspace_user_role_mapping_model_workspace_dict,
53+
KnowledgeFolder)
54+
delete_auth(ApplicationFolder)
55+
delete_auth(ToolFolder)
56+
delete_auth(KnowledgeFolder)
57+
QuerySet(WorkspaceUserResourcePermission).bulk_create(workspace_user_resource_permission_list)
58+
59+
60+
class Migration(migrations.Migration):
861
dependencies = [
962
('system_manage', '0002_refresh_collation_reindex'),
1063
]
@@ -15,4 +68,5 @@ class Migration(migrations.Migration):
1568
name='target',
1669
field=models.CharField(db_index=True, max_length=128, verbose_name='知识库/应用id'),
1770
),
71+
migrations.RunPython(auth_folder, atomic=False)
1872
]

0 commit comments

Comments
 (0)