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/DmsAccessExclusionResolver.java | 77 ++++++++++++++++++++++++++++++++++++++
1 files changed, 77 insertions(+), 0 deletions(-)
diff --git a/jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsPermission/DmsAccessExclusionResolver.java b/jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsPermission/DmsAccessExclusionResolver.java
new file mode 100644
index 0000000..786f461
--- /dev/null
+++ b/jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsPermission/DmsAccessExclusionResolver.java
@@ -0,0 +1,77 @@
+package jnpf.dmsPermission;
+
+import jnpf.dmsEntity.permission.entity.DmsAccessExclusionEntity;
+import jnpf.dmsEntity.permission.enums.DmsResourceType;
+import jnpf.dmsEntity.permission.model.DmsResourcePath;
+import jnpf.dmsMapper.DmsAccessExclusionMapper;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.UUID;
+
+@Component
+@RequiredArgsConstructor
+public class DmsAccessExclusionResolver {
+ private final DmsAccessExclusionMapper exclusionMapper;
+
+ public Snapshot resolve(String tenantId, String userId, Collection<DmsResourcePath> paths) {
+ LinkedHashSet<UUID> resourceIds = new LinkedHashSet<>();
+ for (DmsResourcePath path : paths) {
+ if (path.getDocumentId() != null) {
+ resourceIds.add(path.getDocumentId());
+ }
+ if (DmsResourceType.FILE_VERSION.name().equals(path.getActualResourceType())) {
+ resourceIds.add(path.getActualResourceId());
+ }
+ }
+ if (resourceIds.isEmpty()) {
+ return Snapshot.empty();
+ }
+ List<DmsAccessExclusionEntity> rows = exclusionMapper.selectActiveForResourceIds(
+ tenantId, userId, new ArrayList<>(resourceIds));
+ Set<UUID> documentIds = new HashSet<>();
+ Set<UUID> versionIds = new HashSet<>();
+ for (DmsAccessExclusionEntity row : rows == null
+ ? Collections.<DmsAccessExclusionEntity>emptyList() : rows) {
+ if (DmsResourceType.DOCUMENT.name().equals(row.getResourceType())) {
+ documentIds.add(row.getResourceId());
+ } else if (DmsResourceType.FILE_VERSION.name().equals(row.getResourceType())) {
+ versionIds.add(row.getResourceId());
+ }
+ }
+ return new Snapshot(documentIds, versionIds);
+ }
+
+ public boolean isExcluded(String tenantId, String userId, DmsResourcePath path) {
+ return resolve(tenantId, userId, Collections.singletonList(path)).excludes(path);
+ }
+
+ public static final class Snapshot {
+ private final Set<UUID> documentIds;
+ private final Set<UUID> versionIds;
+
+ public Snapshot(Set<UUID> documentIds, Set<UUID> versionIds) {
+ this.documentIds = new HashSet<>(documentIds);
+ this.versionIds = new HashSet<>(versionIds);
+ }
+
+ public static Snapshot empty() {
+ return new Snapshot(Collections.<UUID>emptySet(), Collections.<UUID>emptySet());
+ }
+
+ public boolean excludes(DmsResourcePath path) {
+ if (DmsResourceType.FILE_VERSION.name().equals(path.getActualResourceType())
+ && versionIds.contains(path.getActualResourceId())) {
+ return true;
+ }
+ return path.getDocumentId() != null && documentIds.contains(path.getDocumentId());
+ }
+ }
+}
--
Gitblit v1.8.0