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());
|
}
|
}
|