package jnpf.dmsPermission; import jnpf.base.UserInfo; import jnpf.dmsEntity.permission.model.DmsSubjectSet; import jnpf.permission.RoleRelationApi; import jnpf.permission.entity.RoleRelationEntity; import jnpf.permission.model.rolerelaiton.RoleRelationModel; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; import java.util.Collections; import java.util.List; @Component @RequiredArgsConstructor public class DmsSubjectResolver { private final DmsSubjectHierarchyResolver hierarchyResolver; private final RoleRelationApi roleRelationApi; public DmsSubjectSet resolve(UserInfo user) { DmsSubjectSet subjects = new DmsSubjectSet(); subjects.setUserId(user.getUserId()); subjects.getDirectOrgIds().addAll(orEmpty(user.getOrganizeIds())); subjects.getPositionIds().addAll(orEmpty(user.getPositionIds())); subjects.getRoleIds().addAll(orEmpty(user.getRoleIds())); subjects.getPlatformGroupIds().addAll(orEmpty(user.getGroupIds())); hierarchyResolver.resolve(Collections.singletonList(subjects)); resolveDirectUserRoles(subjects); return subjects; } private void resolveDirectUserRoles(DmsSubjectSet subjects) { String userId = subjects.getUserId(); if (userId == null || userId.trim().isEmpty()) { return; } List relations = roleRelationApi.getListByObjectId( new RoleRelationModel(Collections.singletonList(userId), "user")); if (relations == null) { return; } for (RoleRelationEntity relation : relations) { if (relation != null && userId.equals(relation.getObjectId()) && "user".equalsIgnoreCase(relation.getObjectType()) && relation.getRoleId() != null && !relation.getRoleId().trim().isEmpty()) { subjects.getDirectUserRoleIds().add(relation.getRoleId().trim()); } } } private List orEmpty(List values) { return values == null ? Collections.emptyList() : values; } }