diff --git a/apps/system_manage/migrations/0004_alter_systemsetting_type_and_more.py b/apps/system_manage/migrations/0004_alter_systemsetting_type_and_more.py new file mode 100644 index 000000000..0ca40e5de --- /dev/null +++ b/apps/system_manage/migrations/0004_alter_systemsetting_type_and_more.py @@ -0,0 +1,37 @@ +# Generated by Django 5.2.7 on 2025-10-16 03:21 + +from django.db import migrations +from django.db.models.functions import RowNumber + + +def remove_duplicates(apps, schema_editor): + from django.db.models import Window, F + workspace_user_resource_permission_model = apps.get_model('system_manage', 'WorkspaceUserResourcePermission') + + duplicates = workspace_user_resource_permission_model.objects.annotate( + row_num=Window( + expression=RowNumber(), + partition_by=[F('workspace_id'), F('user'), F('auth_target_type'), F('target')], + order_by=[F('create_time').desc()], + ) + ).filter(row_num__gt=1) + + ids_to_delete = list(duplicates.values_list('id', flat=True)) + if ids_to_delete: + workspace_user_resource_permission_model.objects.filter(id__in=ids_to_delete).delete() + +class Migration(migrations.Migration): + + dependencies = [ + ('system_manage', '0003_alter_workspaceuserresourcepermission_target'), + ('users', '0001_initial'), + ] + + operations = [ + migrations.RunPython(remove_duplicates, + ), + migrations.AlterUniqueTogether( + name='workspaceuserresourcepermission', + unique_together={('workspace_id', 'user', 'auth_target_type', 'target')}, + ), + ] diff --git a/apps/system_manage/models/workspace_user_permission.py b/apps/system_manage/models/workspace_user_permission.py index 07c8cffd1..d20bfa6ed 100644 --- a/apps/system_manage/models/workspace_user_permission.py +++ b/apps/system_manage/models/workspace_user_permission.py @@ -57,3 +57,4 @@ class WorkspaceUserResourcePermission(models.Model): class Meta: db_table = "workspace_user_resource_permission" + unique_together = ('workspace_id', 'user', 'auth_target_type', 'target') diff --git a/apps/system_manage/sql/get_application_user_resource_permission.sql b/apps/system_manage/sql/get_application_user_resource_permission.sql index 79c133080..98834a9e9 100644 --- a/apps/system_manage/sql/get_application_user_resource_permission.sql +++ b/apps/system_manage/sql/get_application_user_resource_permission.sql @@ -11,7 +11,8 @@ FROM ( user_id, workspace_id, icon, - folder_id + folder_id, + create_time FROM application ${query_set} UNION @@ -22,7 +23,8 @@ FROM ( application_folder."user_id", application_folder."workspace_id", NULL AS "icon", - application_folder."parent_id" AS "folder_id" + application_folder."parent_id" AS "folder_id", + application_folder."create_time" FROM application_folder ${folder_query_set} ) resource_or_folder @@ -42,3 +44,4 @@ LEFT JOIN ( ) wurp ON wurp.target::text = resource_or_folder.id ${resource_query_set} +ORDER BY resource_or_folder.create_time DESC diff --git a/apps/system_manage/sql/get_knowledge_user_resource_permission.sql b/apps/system_manage/sql/get_knowledge_user_resource_permission.sql index 63cda382f..8245c43fa 100644 --- a/apps/system_manage/sql/get_knowledge_user_resource_permission.sql +++ b/apps/system_manage/sql/get_knowledge_user_resource_permission.sql @@ -12,7 +12,8 @@ FROM ( user_id, workspace_id, "type"::varchar AS "icon", - folder_id + folder_id, + create_time FROM knowledge ${query_set} UNION @@ -23,7 +24,8 @@ FROM ( knowledge_folder."user_id", knowledge_folder."workspace_id", NULL AS "icon", - knowledge_folder."parent_id" AS "folder_id" + knowledge_folder."parent_id" AS "folder_id", + knowledge_folder."create_time" FROM knowledge_folder ${folder_query_set} ) resource_or_folder @@ -44,4 +46,5 @@ LEFT JOIN ( ${workspace_user_resource_permission_query_set} ) wurp ON wurp.target::text = resource_or_folder.id -${resource_query_set} \ No newline at end of file +${resource_query_set} +ORDER BY resource_or_folder.create_time DESC \ No newline at end of file diff --git a/apps/system_manage/sql/get_model_user_resource_permission.sql b/apps/system_manage/sql/get_model_user_resource_permission.sql index 1f1838821..e21052598 100644 --- a/apps/system_manage/sql/get_model_user_resource_permission.sql +++ b/apps/system_manage/sql/get_model_user_resource_permission.sql @@ -14,7 +14,8 @@ FROM ( user_id, workspace_id, provider as icon, - 'default' as folder_id + 'default' as folder_id, + create_time FROM model ${query_set} @@ -27,7 +28,8 @@ FROM ( user_id, workspace_id, provider as icon, - 'default' as folder_id + 'default' as folder_id, + create_time FROM model ${folder_query_set} AND 1=0 @@ -49,4 +51,5 @@ LEFT JOIN ( ${workspace_user_resource_permission_query_set} ) wurp ON wurp.target = resource_or_folder."id" -${resource_query_set} \ No newline at end of file +${resource_query_set} +ORDER BY resource_or_folder.create_time DESC \ No newline at end of file diff --git a/apps/system_manage/sql/get_tool_user_resource_permission.sql b/apps/system_manage/sql/get_tool_user_resource_permission.sql index 68f529f27..bac18754a 100644 --- a/apps/system_manage/sql/get_tool_user_resource_permission.sql +++ b/apps/system_manage/sql/get_tool_user_resource_permission.sql @@ -12,7 +12,8 @@ FROM ( workspace_id, icon, folder_id, - tool_type + tool_type, + create_time FROM tool ${query_set} UNION @@ -24,7 +25,8 @@ FROM ( tool_folder."workspace_id", NULL AS "icon", tool_folder."parent_id" AS "folder_id", - NULL AS "tool_type" + NULL AS "tool_type", + tool_folder."create_time" FROM tool_folder ${folder_query_set} ) resource_or_folder @@ -45,4 +47,5 @@ LEFT JOIN ( ) wurp ON wurp.target::text = resource_or_folder."id" ${resource_query_set} +ORDER BY resource_or_folder.create_time DESC