package gov.nysenate.openleg.service.auth;
import org.apache.shiro.authz.Permission;
import org.apache.shiro.authz.permission.RolePermissionResolver;
import org.apache.shiro.realm.AuthorizingRealm;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Collection;
import java.util.Collections;
/**
* Base realm layer which sets up some convenience methods for resolving permissions.
*/
public abstract class OpenLegAuthorizingRealm extends AuthorizingRealm
{
private static final Logger logger = LoggerFactory.getLogger(OpenLegAuthorizingRealm.class);
protected static class OpenLegRolePermissionResolver implements RolePermissionResolver
{
@Override
public Collection<Permission> resolvePermissionsInRole(String roleString) {
try {
OpenLegRole openLegRole = OpenLegRole.valueOf(roleString);
return openLegRole.getWildcardPermissions();
}
catch (IllegalArgumentException ex) {
logger.warn("The role '{}' is not a known role! This needs to be addressed.", roleString);
}
return Collections.emptyList();
}
}
protected static final RolePermissionResolver openlegRolePermResolver = new OpenLegRolePermissionResolver();
@Override
public void setRolePermissionResolver(RolePermissionResolver permissionRoleResolver) {
throw new UnsupportedOperationException("Cannot set role resolvers.");
}
@Override
public RolePermissionResolver getRolePermissionResolver() {
return openlegRolePermResolver;
}
}