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/main/java/jnpf/dmsPermission/DmsPermissionMatcher.java | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 53 insertions(+), 0 deletions(-)
diff --git a/jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsPermission/DmsPermissionMatcher.java b/jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsPermission/DmsPermissionMatcher.java
new file mode 100644
index 0000000..648db23
--- /dev/null
+++ b/jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsPermission/DmsPermissionMatcher.java
@@ -0,0 +1,53 @@
+package jnpf.dmsPermission;
+
+import jnpf.dmsEntity.permission.entity.DmsFilePermissionEntity;
+import jnpf.dmsEntity.permission.enums.DmsPrincipalType;
+import jnpf.dmsEntity.permission.enums.DmsResourceScope;
+import jnpf.dmsEntity.permission.enums.DmsResourceType;
+import jnpf.dmsEntity.permission.model.DmsResourcePath;
+import jnpf.dmsEntity.permission.model.DmsSubjectSet;
+import org.springframework.stereotype.Component;
+
+@Component
+public class DmsPermissionMatcher {
+
+ public boolean matches(DmsFilePermissionEntity permission, DmsResourcePath path, DmsSubjectSet subjects) {
+ return matchesPrincipal(permission, subjects) && coversResource(permission, path);
+ }
+
+ public boolean matchesPrincipal(DmsFilePermissionEntity permission, DmsSubjectSet subjects) {
+ DmsPrincipalType type = DmsPrincipalType.valueOf(permission.getPrincipalType());
+ String id = permission.getPrincipalId();
+ switch (type) {
+ case USER:
+ return id.equals(subjects.getUserId());
+ case ORG:
+ return Boolean.TRUE.equals(permission.getIncludeChildOrgs())
+ ? subjects.getAncestorOrgIds().contains(id)
+ : subjects.getDirectOrgIds().contains(id);
+ case POSITION:
+ return subjects.getPositionIds().contains(id);
+ case ROLE:
+ return subjects.getRoleIds().contains(id);
+ case GROUP:
+ return subjects.getPermissionGroupIds().contains(id);
+ default:
+ return false;
+ }
+ }
+
+ public boolean coversResource(DmsFilePermissionEntity permission, DmsResourcePath path) {
+ DmsResourceType grantedType = DmsResourceType.valueOf(permission.getResourceType());
+ if (grantedType == DmsResourceType.FILE_VERSION) {
+ return DmsResourceType.FILE_VERSION.name().equals(path.getActualResourceType())
+ && permission.getResourceId().equals(path.getActualResourceId());
+ }
+ if (grantedType == DmsResourceType.DOCUMENT) {
+ return permission.getResourceId().equals(path.getDocumentId());
+ }
+ if (DmsResourceScope.SUBTREE.name().equals(permission.getResourceScope())) {
+ return path.getFolderPath().contains(permission.getResourceId());
+ }
+ return permission.getResourceId().equals(path.getDirectFolderId());
+ }
+}
--
Gitblit v1.8.0