package com.mossle.security.perm;
import java.util.Collection;
import org.springframework.security.access.AccessDecisionVoter;
import org.springframework.security.access.ConfigAttribute;
import org.springframework.security.core.Authentication;
public class PermissionVoter implements AccessDecisionVoter<Object> {
private PermissionChecker permissionChecker;
public boolean supports(ConfigAttribute attribute) {
return attribute.getAttribute() != null;
}
public boolean supports(Class<?> clazz) {
return true;
}
public int vote(Authentication authentication, Object object,
Collection<ConfigAttribute> configAttributes) {
int result = ACCESS_ABSTAIN;
for (ConfigAttribute configAttribute : configAttributes) {
if (this.supports(configAttribute)) {
result = ACCESS_DENIED;
String text = getPermission(configAttribute);
boolean authorized = permissionChecker.isAuthorized(text);
if (authorized) {
return ACCESS_GRANTED;
}
}
}
return result;
}
private String getPermission(ConfigAttribute configAttribute) {
return configAttribute.getAttribute();
}
public void setPermissionChecker(PermissionChecker permissionChecker) {
this.permissionChecker = permissionChecker;
}
}