# Generated by Django 5.2.6 on 2025-10-11 02:54 from functools import reduce from django.db import migrations, models from django.db.models import QuerySet from common.constants.permission_constants import WorkspaceUserRoleMapping from common.utils.common import group_by from application.models import ApplicationFolder from knowledge.models import KnowledgeFolder from tools.models import ToolFolder from system_manage.models import WorkspaceUserResourcePermission from users.models import User def delete_auth(folder_model): QuerySet(WorkspaceUserResourcePermission).filter(target__in=QuerySet(folder_model).values_list('id')).delete() def get_workspace_user_resource_permission_list(auth_target_type, workspace_user_role_mapping_model_workspace_dict, folder_model): return reduce(lambda x, y: [*x, *y], [ [WorkspaceUserResourcePermission(target=f.id, workspace_id=f.workspace_id, user_id=wurm.user_id, auth_target_type=auth_target_type, auth_type="RESOURCE_PERMISSION_GROUP", permission_list=['VIEW','MANAGE'] if wurm.user_id == f.user_id else ['VIEW']) for wurm in workspace_user_role_mapping_model_workspace_dict.get(f.workspace_id, [])] for f in QuerySet(folder_model).all()], []) def auth_folder(apps, schema_editor): from common.database_model_manage.database_model_manage import DatabaseModelManage DatabaseModelManage.init() workspace_user_role_mapping_model = DatabaseModelManage.get_model("workspace_user_role_mapping") if workspace_user_role_mapping_model is None: workspace_user_role_mapping_model_workspace_dict = { 'default': [WorkspaceUserRoleMapping('default', '', u.id) for u in QuerySet(User).all()]} else: workspace_user_role_mapping_model_workspace_dict = group_by( [v for v in {str(wurm.user_id) + str(wurm.workspace_id): wurm for wurm in QuerySet(workspace_user_role_mapping_model)}.values()], lambda item: item.workspace_id) workspace_user_resource_permission_list = get_workspace_user_resource_permission_list("APPLICATION", workspace_user_role_mapping_model_workspace_dict, ApplicationFolder) workspace_user_resource_permission_list += get_workspace_user_resource_permission_list("TOOL", workspace_user_role_mapping_model_workspace_dict, ToolFolder) workspace_user_resource_permission_list += get_workspace_user_resource_permission_list("KNOWLEDGE", workspace_user_role_mapping_model_workspace_dict, KnowledgeFolder) delete_auth(ApplicationFolder) delete_auth(ToolFolder) delete_auth(KnowledgeFolder) QuerySet(WorkspaceUserResourcePermission).bulk_create(workspace_user_resource_permission_list) class Migration(migrations.Migration): dependencies = [ ('system_manage', '0002_refresh_collation_reindex'), ] operations = [ migrations.AlterField( model_name='workspaceuserresourcepermission', name='target', field=models.CharField(db_index=True, max_length=128, verbose_name='知识库/应用id'), ), migrations.RunPython(auth_folder, atomic=False) ]