userIs... VariableResolver to Check Roles


1. VariableResolver. Add as a Java class

package org.openntf;

import java.util.List;
import java.util.logging.Level;

import javax.faces.context.FacesContext;
import javax.faces.el.EvaluationException;
import javax.faces.el.VariableResolver;

import com.ibm.xsp.extlib.util.ExtLibUtil;

/**
 * @author Paul Withers
 *
 */

public class BaseVariableResolver extends VariableResolver {

	private final VariableResolver delegate;

	public BaseVariableResolver(VariableResolver resolver) {
		delegate = resolver;
	}

	@SuppressWarnings( { "unchecked", "finally" })
	private boolean hasRole(String roleName) {
		boolean retVal = false;
		try {
			List roles = ExtLibUtil.getCurrentDatabase().queryAccessRoles(
					ExtLibUtil.getCurrentSession().getEffectiveUserName());
			if (roles.contains("[" + roleName + "]")) {
				retVal = true;
			}
		} catch (Exception e) {
			// Add error handling
		} finally {
			return retVal;
		}
	}

	@Override
	public Object resolveVariable(FacesContext context, String name) throws EvaluationException {
		try {
			if (name.length() > 6 && "userIs".equals(name.substring(0, 6))) {
				return hasRole(name.substring(6));
			} else {
				return delegate.resolveVariable(context, name);
			}
		} catch (Exception e) {
			// Add error handling
			return delegate.resolveVariable(context, name);
		}
	}

}

2. faces-config.xml code. Add before AUTOGEN section

	<application>
		<variable-resolver>uk.co.intec.BaseVariableResolver</variable-resolver>
	</application>

3. Add Expression Language to page, e.g. #{userIsAdmin} to check if the user has [Admin] role or within SSJS - if (userIsAdmin) doSomething();
All code submitted to OpenNTF XSnippets, whether submitted as a "Snippet" or in the body of a Comment, is provided under the Apache License Version 2.0. See Terms of Use for full details.
No comments yetLogin first to comment...