UnisKB/apps/system_manage/migrations/0003_alter_workspaceuserres...

77 lines
4.2 KiB
Python
Raw Normal View History

2025-10-14 08:31:30 +00:00
# Generated by Django 5.2.6 on 2025-10-11 02:54
2025-10-15 08:52:51 +00:00
from functools import reduce
2025-10-14 08:31:30 +00:00
from django.db import migrations, models
2025-10-15 08:52:51 +00:00
from django.db.models import QuerySet
2025-10-14 08:31:30 +00:00
2025-10-15 08:52:51 +00:00
from common.constants.permission_constants import WorkspaceUserRoleMapping
from common.utils.common import group_by
2025-10-14 08:31:30 +00:00
2025-10-30 06:25:12 +00:00
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()
2025-10-15 08:52:51 +00:00
2025-10-30 06:25:12 +00:00
def get_workspace_user_resource_permission_list(apps, auth_target_type, workspace_user_role_mapping_model_workspace_dict,
2025-10-15 08:52:51 +00:00
folder_model):
2025-10-30 06:25:12 +00:00
workspace_user_resource_permission_model = apps.get_model('system_manage', 'WorkspaceUserResourcePermission')
2025-10-15 08:52:51 +00:00
return reduce(lambda x, y: [*x, *y], [
2025-10-30 06:25:12 +00:00
[workspace_user_resource_permission_model(target=f.id, workspace_id=f.workspace_id, user_id=wurm.user_id,
2025-10-15 08:52:51 +00:00
auth_target_type=auth_target_type, auth_type="RESOURCE_PERMISSION_GROUP",
2025-10-22 06:47:52 +00:00
permission_list=['VIEW','MANAGE'] if wurm.user_id == f.user_id else ['VIEW']) for wurm in
2025-10-15 08:52:51 +00:00
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()
2025-10-30 06:25:12 +00:00
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')
2025-10-15 08:52:51 +00:00
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 = {
2025-10-30 06:25:12 +00:00
'default': [WorkspaceUserRoleMapping('default', '', u.id) for u in QuerySet(user_model).all()]}
2025-10-15 08:52:51 +00:00
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)
2025-10-30 06:25:12 +00:00
workspace_user_resource_permission_list = get_workspace_user_resource_permission_list(apps,"APPLICATION",
2025-10-15 08:52:51 +00:00
workspace_user_role_mapping_model_workspace_dict,
2025-10-30 06:25:12 +00:00
application_folder_model)
2025-10-15 08:52:51 +00:00
2025-10-30 06:25:12 +00:00
workspace_user_resource_permission_list += get_workspace_user_resource_permission_list(apps,"TOOL",
2025-10-15 08:52:51 +00:00
workspace_user_role_mapping_model_workspace_dict,
2025-10-30 07:34:57 +00:00
tool_folder_model)
2025-10-15 08:52:51 +00:00
2025-10-30 06:25:12 +00:00
workspace_user_resource_permission_list += get_workspace_user_resource_permission_list(apps,"KNOWLEDGE",
2025-10-15 08:52:51 +00:00
workspace_user_role_mapping_model_workspace_dict,
2025-10-30 07:34:57 +00:00
knowledge_folder_model)
2025-10-30 06:25:12 +00:00
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)
2025-10-15 08:52:51 +00:00
class Migration(migrations.Migration):
2025-10-14 08:31:30 +00:00
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'),
),
2025-10-15 08:52:51 +00:00
migrations.RunPython(auth_folder, atomic=False)
2025-10-14 08:31:30 +00:00
]