| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- # Generated by Django 5.2.6 on 2025-10-11 02:54
- from concurrent.futures import ThreadPoolExecutor
- 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
- def workspace_user_role_mapping_model_exists(workspace_user_role_mapping_model):
- try:
- QuerySet(workspace_user_role_mapping_model).first()
- except Exception as e:
- return False
- return False
- def delete_auth(apps,folder_model):
- workspace_user_resource_permission_model = apps.get_model('system_manage', 'WorkspaceUserResourcePermission')
- QuerySet(workspace_user_resource_permission_model).filter(target__in=QuerySet(folder_model).values_list('id')).delete()
- def get_workspace_user_resource_permission_list(apps, auth_target_type, workspace_user_role_mapping_model_workspace_dict,
- folder_model):
- workspace_user_resource_permission_model = apps.get_model('system_manage', 'WorkspaceUserResourcePermission')
- return reduce(lambda x, y: [*x, *y], [
- [workspace_user_resource_permission_model(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()
- user_model = apps.get_model('users', 'User')
- application_folder_model = apps.get_model('application', 'ApplicationFolder')
- knowledge_folder_model = apps.get_model('knowledge', 'KnowledgeFolder')
- tool_folder_model = apps.get_model('tools', 'ToolFolder')
- workspace_user_resource_permission_model = apps.get_model('system_manage', 'WorkspaceUserResourcePermission')
- workspace_user_role_mapping_model = DatabaseModelManage.get_model("workspace_user_role_mapping")
- with ThreadPoolExecutor(max_workers=3) as executor:
- future = executor.submit(workspace_user_role_mapping_model_exists, workspace_user_role_mapping_model)
- exists = future.result()
- if not exists:
- workspace_user_role_mapping_model = None
- 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_model).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(apps,"APPLICATION",
- workspace_user_role_mapping_model_workspace_dict,
- application_folder_model)
- workspace_user_resource_permission_list += get_workspace_user_resource_permission_list(apps,"TOOL",
- workspace_user_role_mapping_model_workspace_dict,
- tool_folder_model)
- workspace_user_resource_permission_list += get_workspace_user_resource_permission_list(apps,"KNOWLEDGE",
- workspace_user_role_mapping_model_workspace_dict,
- knowledge_folder_model)
- delete_auth(apps,application_folder_model)
- delete_auth(apps,knowledge_folder_model)
- delete_auth(apps,tool_folder_model)
- QuerySet(workspace_user_resource_permission_model).bulk_create(workspace_user_resource_permission_list)
- class Migration(migrations.Migration):
- dependencies = [
- ('system_manage', '0002_refresh_collation_reindex'),
- ('tools', '0001_initial'),
- ('application', '0001_initial'),
- ('knowledge', '0001_initial'),
- ]
- 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)
- ]
|