package org.jboss.seam.web;
import static org.jboss.seam.annotations.Install.BUILT_IN;
import java.util.AbstractMap;
import java.util.Map;
import java.util.Set;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Install;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.Unwrap;
import org.jboss.seam.annotations.intercept.BypassInterceptors;
/**
* Manager component for a map of roles assigned
* to the current user, as exposed via the JSF
* ExternalContext.
*
* @author Gavin King
*/
@Scope(ScopeType.APPLICATION)
@BypassInterceptors
@Name("org.jboss.seam.web.isUserInRole")
@Install(precedence=BUILT_IN)
public class IsUserInRole
{
@Unwrap
public Map<String, Boolean> getMap()
{
return new AbstractMap<String, Boolean>()
{
@Override
public Set<Map.Entry<String, Boolean>> entrySet() {
throw new UnsupportedOperationException();
}
@Override
public Boolean get(Object key)
{
if ( !(key instanceof String ) ) return false;
String role = (String) key;
return isUserInRole(role);
}
};
}
protected Boolean isUserInRole(String role)
{
ServletRequest servletRequest = ServletContexts.instance().getRequest();
if ( servletRequest != null )
{
return ( (HttpServletRequest) servletRequest ).isUserInRole(role);
}
return null;
}
}