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/DmsPrincipalValidator.java | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 100 insertions(+), 0 deletions(-)
diff --git a/jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsPermission/DmsPrincipalValidator.java b/jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsPermission/DmsPrincipalValidator.java
new file mode 100644
index 0000000..354f11f
--- /dev/null
+++ b/jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsPermission/DmsPrincipalValidator.java
@@ -0,0 +1,100 @@
+package jnpf.dmsPermission;
+
+import jnpf.dmsEntity.permission.enums.DmsPrincipalType;
+import jnpf.dmsEntity.permission.form.PermissionGrantItemForm;
+import jnpf.dmsMapper.DmsPermissionGroupMapper;
+import jnpf.permission.OrganizeApi;
+import jnpf.permission.PositionApi;
+import jnpf.permission.RoleApi;
+import jnpf.permission.UserApi;
+import jnpf.permission.entity.OrganizeEntity;
+import jnpf.permission.entity.PermissionGroupEntity;
+import jnpf.permission.entity.PositionEntity;
+import jnpf.permission.entity.RoleEntity;
+import jnpf.permission.entity.UserEntity;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EnumMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+@Component
+@RequiredArgsConstructor
+public class DmsPrincipalValidator {
+ private final UserApi userApi;
+ private final OrganizeApi organizeApi;
+ private final PositionApi positionApi;
+ private final RoleApi roleApi;
+ private final DmsPermissionGroupMapper permissionGroupMapper;
+
+ public void validate(List<PermissionGrantItemForm> items) {
+ Map<DmsPrincipalType, Set<String>> expected = new EnumMap<>(DmsPrincipalType.class);
+ for (PermissionGrantItemForm item : items) {
+ expected.computeIfAbsent(item.getPrincipalType(), key -> new HashSet<>())
+ .add(item.getPrincipalId().trim());
+ }
+ if (expected.containsKey(DmsPrincipalType.USER)) {
+ validateType(expected, DmsPrincipalType.USER, ids(userApi.getUserName(list(expected,
+ DmsPrincipalType.USER)), UserEntity::getId));
+ }
+ if (expected.containsKey(DmsPrincipalType.ORG)) {
+ validateType(expected, DmsPrincipalType.ORG, ids(organizeApi.getListByIds(list(expected,
+ DmsPrincipalType.ORG)), OrganizeEntity::getId));
+ }
+ if (expected.containsKey(DmsPrincipalType.POSITION)) {
+ validateType(expected, DmsPrincipalType.POSITION, ids(positionApi.getListByIds(list(expected,
+ DmsPrincipalType.POSITION)), PositionEntity::getId));
+ }
+ if (expected.containsKey(DmsPrincipalType.ROLE)) {
+ validateType(expected, DmsPrincipalType.ROLE, ids(roleApi.getListByIds(list(expected,
+ DmsPrincipalType.ROLE)), RoleEntity::getId));
+ }
+ if (expected.containsKey(DmsPrincipalType.GROUP)) {
+ validateType(expected, DmsPrincipalType.GROUP,
+ ids(permissionGroupMapper.selectEnabledByIds(expected.get(DmsPrincipalType.GROUP)),
+ PermissionGroupEntity::getId));
+ }
+ }
+
+ public void validateUsers(Collection<String> userIds) {
+ Set<String> expected = userIds.stream().map(String::trim).collect(Collectors.toSet());
+ Set<String> actual = ids(userApi.getUserName(new ArrayList<>(expected)), UserEntity::getId);
+ Set<String> missing = new HashSet<>(expected);
+ missing.removeAll(actual);
+ if (!missing.isEmpty()) {
+ throw DmsPermissionException.of(DmsPermissionError.PRINCIPAL_NOT_FOUND,
+ DmsPrincipalType.USER.name() + " 涓讳綋涓嶅瓨鍦ㄦ垨涓讳綋鏈嶅姟涓嶅彲鐢�: " + missing);
+ }
+ }
+
+ private List<String> list(Map<DmsPrincipalType, Set<String>> values, DmsPrincipalType type) {
+ Set<String> ids = values.get(type);
+ return ids == null ? Collections.<String>emptyList() : new ArrayList<>(ids);
+ }
+
+ private <T> Set<String> ids(List<T> values, Function<T, String> getter) {
+ if (values == null) {
+ return Collections.emptySet();
+ }
+ return values.stream().filter(value -> value != null && getter.apply(value) != null)
+ .map(getter).collect(Collectors.toSet());
+ }
+
+ private void validateType(Map<DmsPrincipalType, Set<String>> expected, DmsPrincipalType type,
+ Set<String> actual) {
+ Set<String> missing = new HashSet<>(expected.getOrDefault(type, Collections.<String>emptySet()));
+ missing.removeAll(actual);
+ if (!missing.isEmpty()) {
+ throw DmsPermissionException.of(DmsPermissionError.PRINCIPAL_NOT_FOUND,
+ type.name() + " 涓讳綋涓嶅瓨鍦ㄦ垨涓讳綋鏈嶅姟涓嶅彲鐢�: " + missing);
+ }
+ }
+}
--
Gitblit v1.8.0