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/java/jnpf/dmsPermission/DmsPermissionMatcherTest.java | 121 ++++++++++++++++++++++++++++++++++++++++
1 files changed, 121 insertions(+), 0 deletions(-)
diff --git a/jnpf-dms/jnpf-dms-biz/src/test/java/jnpf/dmsPermission/DmsPermissionMatcherTest.java b/jnpf-dms/jnpf-dms-biz/src/test/java/jnpf/dmsPermission/DmsPermissionMatcherTest.java
new file mode 100644
index 0000000..3d8ba2b
--- /dev/null
+++ b/jnpf-dms/jnpf-dms-biz/src/test/java/jnpf/dmsPermission/DmsPermissionMatcherTest.java
@@ -0,0 +1,121 @@
+package jnpf.dmsPermission;
+
+import jnpf.dmsEntity.permission.entity.DmsFilePermissionEntity;
+import jnpf.dmsEntity.permission.model.DmsResourcePath;
+import jnpf.dmsEntity.permission.model.DmsSubjectSet;
+import org.junit.jupiter.api.Test;
+
+import java.util.Arrays;
+import java.util.UUID;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+class DmsPermissionMatcherTest {
+ private final DmsPermissionMatcher matcher = new DmsPermissionMatcher();
+ private final UUID root = UUID.randomUUID();
+ private final UUID child = UUID.randomUUID();
+ private final UUID document = UUID.randomUUID();
+ private final UUID version = UUID.randomUUID();
+
+ @Test
+ void folderSelfCoversDirectDocumentButNotChildFolder() {
+ DmsFilePermissionEntity permission = permission("FOLDER", root, "SELF", "USER", "u1", false);
+ DmsSubjectSet subjects = user("u1");
+
+ assertTrue(matcher.matches(permission, documentPath(root), subjects));
+ assertFalse(matcher.matches(permission, folderPath(child, root), subjects));
+ }
+
+ @Test
+ void folderSubtreeCoversDescendantVersion() {
+ DmsFilePermissionEntity permission = permission("FOLDER", root, "SUBTREE", "USER", "u1", false);
+ assertTrue(matcher.matches(permission, versionPath(child, root), user("u1")));
+ }
+
+ @Test
+ void documentSelfCoversAllItsVersions() {
+ DmsFilePermissionEntity permission = permission("DOCUMENT", document, "SELF", "USER", "u1", false);
+ assertTrue(matcher.matches(permission, versionPath(child, root), user("u1")));
+ }
+
+ @Test
+ void fileVersionDoesNotCoverAnotherVersion() {
+ DmsFilePermissionEntity permission = permission("FILE_VERSION", version, "SELF", "USER", "u1", false);
+ DmsResourcePath other = versionPath(child, root);
+ other.setActualResourceId(UUID.randomUUID());
+ assertFalse(matcher.matches(permission, other, user("u1")));
+ }
+
+ @Test
+ void childOrganizationRequiresIncludeChildOrgs() {
+ DmsSubjectSet subjects = user("u1");
+ subjects.getDirectOrgIds().add("child-org");
+ subjects.getAncestorOrgIds().addAll(Arrays.asList("child-org", "root-org"));
+ DmsFilePermissionEntity directOnly = permission("DOCUMENT", document, "SELF", "ORG", "root-org", false);
+ DmsFilePermissionEntity descendants = permission("DOCUMENT", document, "SELF", "ORG", "root-org", true);
+
+ assertFalse(matcher.matches(directOnly, documentPath(child), subjects));
+ assertTrue(matcher.matches(descendants, documentPath(child), subjects));
+ }
+
+ @Test
+ void dmsGroupUsesResolvedPermissionGroupsOnly() {
+ DmsSubjectSet subjects = user("u1");
+ subjects.getPlatformGroupIds().add("g1");
+ DmsFilePermissionEntity permission = permission("DOCUMENT", document, "SELF", "GROUP", "g1", false);
+
+ assertFalse(matcher.matches(permission, documentPath(child), subjects));
+ subjects.getPermissionGroupIds().add("g1");
+ assertTrue(matcher.matches(permission, documentPath(child), subjects));
+ }
+
+ private DmsFilePermissionEntity permission(String type, UUID resourceId, String scope,
+ String principalType, String principalId, boolean childOrgs) {
+ DmsFilePermissionEntity result = new DmsFilePermissionEntity();
+ result.setResourceType(type);
+ result.setResourceId(resourceId);
+ result.setResourceScope(scope);
+ result.setPrincipalType(principalType);
+ result.setPrincipalId(principalId);
+ result.setIncludeChildOrgs(childOrgs);
+ return result;
+ }
+
+ private DmsSubjectSet user(String id) {
+ DmsSubjectSet result = new DmsSubjectSet();
+ result.setUserId(id);
+ return result;
+ }
+
+ private DmsResourcePath folderPath(UUID actual, UUID... ancestors) {
+ DmsResourcePath result = new DmsResourcePath();
+ result.setActualResourceType("FOLDER");
+ result.setActualResourceId(actual);
+ result.setDirectFolderId(actual);
+ result.getFolderPath().add(actual);
+ result.getFolderPath().addAll(Arrays.asList(ancestors));
+ return result;
+ }
+
+ private DmsResourcePath documentPath(UUID folder) {
+ DmsResourcePath result = new DmsResourcePath();
+ result.setActualResourceType("DOCUMENT");
+ result.setActualResourceId(document);
+ result.setDocumentId(document);
+ result.setDirectFolderId(folder);
+ result.getFolderPath().add(folder);
+ return result;
+ }
+
+ private DmsResourcePath versionPath(UUID folder, UUID... ancestors) {
+ DmsResourcePath result = new DmsResourcePath();
+ result.setActualResourceType("FILE_VERSION");
+ result.setActualResourceId(version);
+ result.setDocumentId(document);
+ result.setDirectFolderId(folder);
+ result.getFolderPath().add(folder);
+ result.getFolderPath().addAll(Arrays.asList(ancestors));
+ return result;
+ }
+}
--
Gitblit v1.8.0