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<RoleRelationEntity> 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<String> orEmpty(List<String> values) {
|
return values == null ? Collections.<String>emptyList() : values;
|
}
|
}
|