From 34981c30a78e8bbd7791131059a9210f9928b62c Mon Sep 17 00:00:00 2001
From: 刘光辉 <347230014@qq.com>
Date: 星期四, 17 九月 2026 09:24:09 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master' into master
---
jnpf-dms/jnpf-dms-biz/src/test/resources/sql/dms_permission_v2_2_test.sql | 285 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 285 insertions(+), 0 deletions(-)
diff --git a/jnpf-dms/jnpf-dms-biz/src/test/resources/sql/dms_permission_v2_2_test.sql b/jnpf-dms/jnpf-dms-biz/src/test/resources/sql/dms_permission_v2_2_test.sql
new file mode 100644
index 0000000..49c8d8b
--- /dev/null
+++ b/jnpf-dms/jnpf-dms-biz/src/test/resources/sql/dms_permission_v2_2_test.sql
@@ -0,0 +1,285 @@
+\set ON_ERROR_STOP on
+
+BEGIN;
+
+DO $dms_test$
+BEGIN
+ BEGIN
+ INSERT INTO public.dms_folders (id, tenant_id, parent_id, name, created_by)
+ VALUES (
+ '018f0000-0000-7000-8000-000000000098',
+ 'dms-v22-test',
+ NULL,
+ 'Missing registry',
+ 'dms-test'
+ );
+ SET CONSTRAINTS trg_dms_folders_require_registry IMMEDIATE;
+ RAISE EXCEPTION 'business object without a registry row was accepted';
+ EXCEPTION
+ WHEN foreign_key_violation THEN NULL;
+ END;
+END;
+$dms_test$;
+
+INSERT INTO public.dms_folders (id, tenant_id, parent_id, name, created_by)
+VALUES
+ ('018f0000-0000-7000-8000-000000000001', 'dms-v22-test', NULL, 'Root', 'dms-test'),
+ ('018f0000-0000-7000-8000-000000000005', 'dms-v22-test', NULL, 'Other', 'dms-test');
+
+INSERT INTO public.dms_permission_resources (
+ id, tenant_id, resource_type, source_type, source_id, registered_by
+)
+VALUES
+ ('018f0000-0000-7000-8000-000000000001', 'dms-v22-test', 'FOLDER', 'SYSTEM', 'resource-root', 'dms-test'),
+ ('018f0000-0000-7000-8000-000000000005', 'dms-v22-test', 'FOLDER', 'SYSTEM', 'resource-other', 'dms-test');
+
+INSERT INTO public.dms_folders (id, tenant_id, parent_id, name, created_by)
+VALUES (
+ '018f0000-0000-7000-8000-000000000002',
+ 'dms-v22-test',
+ '018f0000-0000-7000-8000-000000000001',
+ 'Child',
+ 'dms-test'
+);
+
+INSERT INTO public.dms_permission_resources (
+ id, tenant_id, resource_type, source_type, source_id, registered_by
+)
+VALUES (
+ '018f0000-0000-7000-8000-000000000002',
+ 'dms-v22-test',
+ 'FOLDER',
+ 'SYSTEM',
+ 'resource-child',
+ 'dms-test'
+);
+
+INSERT INTO public.dms_documents (id, tenant_id, folder_id, name, created_by)
+VALUES (
+ '018f0000-0000-7000-8000-000000000003',
+ 'dms-v22-test',
+ '018f0000-0000-7000-8000-000000000002',
+ 'Document',
+ 'dms-test'
+);
+
+INSERT INTO public.dms_permission_resources (
+ id, tenant_id, resource_type, source_type, source_id, registered_by
+)
+VALUES (
+ '018f0000-0000-7000-8000-000000000003',
+ 'dms-v22-test',
+ 'DOCUMENT',
+ 'SYSTEM',
+ 'resource-document',
+ 'dms-test'
+);
+
+INSERT INTO public.dms_file_versions (
+ id, tenant_id, document_id, version_no, file_name, mime_type,
+ size_bytes, checksum_sha256, created_by
+)
+VALUES (
+ '018f0000-0000-7000-8000-000000000004',
+ 'dms-v22-test',
+ '018f0000-0000-7000-8000-000000000003',
+ 1,
+ 'document-v1.pdf',
+ 'application/pdf',
+ 1024,
+ repeat('a', 64),
+ 'dms-test'
+);
+
+INSERT INTO public.dms_permission_resources (
+ id, tenant_id, resource_type, source_type, source_id, registered_by
+)
+VALUES (
+ '018f0000-0000-7000-8000-000000000004',
+ 'dms-v22-test',
+ 'FILE_VERSION',
+ 'SYSTEM',
+ 'resource-version',
+ 'dms-test'
+);
+
+DO $dms_test$
+BEGIN
+ BEGIN
+ INSERT INTO public.dms_permission_resources (
+ id, tenant_id, resource_type, source_type, source_id, registered_by
+ ) VALUES (
+ '018f0000-0000-7000-8000-000000000099',
+ 'dms-v22-test',
+ 'DOCUMENT',
+ 'SYSTEM',
+ 'missing-business-object',
+ 'dms-test'
+ );
+ RAISE EXCEPTION 'registry without a business object was accepted';
+ EXCEPTION
+ WHEN foreign_key_violation THEN NULL;
+ END;
+END;
+$dms_test$;
+
+INSERT INTO public.dms_file_permissions (
+ tenant_id, resource_type, resource_id, resource_scope,
+ principal_type, principal_id, action_code, source_type, source_id,
+ max_use_count, granted_by_type, granted_by_id
+)
+VALUES (
+ 'dms-v22-test',
+ 'DOCUMENT',
+ '018f0000-0000-7000-8000-000000000003',
+ 'SELF',
+ 'USER',
+ 'user-1',
+ 'UPDATE',
+ 'SYSTEM',
+ 'grant-document-update',
+ 1,
+ 'SERVICE',
+ 'dms-test'
+);
+
+INSERT INTO public.dms_permission_usages (
+ tenant_id, permission_id, user_id, action_code,
+ actual_resource_type, actual_resource_id, operation_id
+)
+SELECT
+ tenant_id,
+ id,
+ 'user-1',
+ 'UPDATE',
+ 'FILE_VERSION',
+ '018f0000-0000-7000-8000-000000000004',
+ '018f0000-0000-7000-8000-000000000101'
+FROM public.dms_file_permissions
+WHERE tenant_id = 'dms-v22-test'
+ AND source_id = 'grant-document-update';
+
+DO $dms_test$
+DECLARE
+ actual_used BIGINT;
+BEGIN
+ SELECT used_count INTO actual_used
+ FROM public.dms_file_permissions
+ WHERE tenant_id = 'dms-v22-test'
+ AND source_id = 'grant-document-update';
+
+ IF actual_used <> 1 THEN
+ RAISE EXCEPTION 'expected used_count=1, got %', actual_used;
+ END IF;
+END;
+$dms_test$;
+
+DO $dms_test$
+DECLARE
+ permission_uuid UUID;
+BEGIN
+ SELECT id INTO permission_uuid
+ FROM public.dms_file_permissions
+ WHERE tenant_id = 'dms-v22-test'
+ AND source_id = 'grant-document-update';
+
+ BEGIN
+ INSERT INTO public.dms_permission_usages (
+ tenant_id, permission_id, user_id, action_code,
+ actual_resource_type, actual_resource_id, operation_id
+ ) VALUES (
+ 'dms-v22-test',
+ permission_uuid,
+ 'user-1',
+ 'UPDATE',
+ 'FILE_VERSION',
+ '018f0000-0000-7000-8000-000000000004',
+ '018f0000-0000-7000-8000-000000000101'
+ );
+ RAISE EXCEPTION 'duplicate operation_id was accepted';
+ EXCEPTION
+ WHEN insufficient_privilege OR unique_violation THEN NULL;
+ END;
+END;
+$dms_test$;
+
+DO $dms_test$
+DECLARE
+ actual_used BIGINT;
+BEGIN
+ SELECT used_count INTO actual_used
+ FROM public.dms_file_permissions
+ WHERE tenant_id = 'dms-v22-test'
+ AND source_id = 'grant-document-update';
+
+ IF actual_used <> 1 THEN
+ RAISE EXCEPTION 'retry changed used_count to %', actual_used;
+ END IF;
+END;
+$dms_test$;
+
+INSERT INTO public.dms_file_permissions (
+ tenant_id, resource_type, resource_id, resource_scope,
+ principal_type, principal_id, action_code, source_type, source_id,
+ max_use_count, granted_by_type, granted_by_id
+)
+VALUES (
+ 'dms-v22-test',
+ 'FOLDER',
+ '018f0000-0000-7000-8000-000000000005',
+ 'SUBTREE',
+ 'USER',
+ 'user-1',
+ 'READ',
+ 'SYSTEM',
+ 'grant-other-folder',
+ 1,
+ 'SERVICE',
+ 'dms-test'
+);
+
+DO $dms_test$
+DECLARE
+ permission_uuid UUID;
+BEGIN
+ SELECT id INTO permission_uuid
+ FROM public.dms_file_permissions
+ WHERE tenant_id = 'dms-v22-test'
+ AND source_id = 'grant-other-folder';
+
+ BEGIN
+ INSERT INTO public.dms_permission_usages (
+ tenant_id, permission_id, user_id, action_code,
+ actual_resource_type, actual_resource_id, operation_id
+ ) VALUES (
+ 'dms-v22-test',
+ permission_uuid,
+ 'user-1',
+ 'READ',
+ 'FILE_VERSION',
+ '018f0000-0000-7000-8000-000000000004',
+ '018f0000-0000-7000-8000-000000000102'
+ );
+ RAISE EXCEPTION 'unrelated Folder permission covered a FileVersion';
+ EXCEPTION
+ WHEN insufficient_privilege THEN NULL;
+ END;
+END;
+$dms_test$;
+
+DO $dms_test$
+BEGIN
+ BEGIN
+ UPDATE public.dms_folders
+ SET name = 'Changed'
+ WHERE id = '018f0000-0000-7000-8000-000000000001';
+ RAISE EXCEPTION 'immutable Folder update was accepted';
+ EXCEPTION
+ WHEN object_not_in_prerequisite_state THEN NULL;
+ END;
+END;
+$dms_test$;
+
+SET CONSTRAINTS ALL IMMEDIATE;
+
+ROLLBACK;
--
Gitblit v1.8.0