All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.swm.gwt.client.authorization.impl.RoleConfiguration Maven / Gradle / Ivy

The newest version!
/*
 * @copyright (c) 2014 SWM Services GmbH
 */

package de.swm.gwt.client.authorization.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.google.gwt.user.client.Window;

import de.swm.gwt.client.authorization.IAccessRight;
import de.swm.gwt.client.authorization.IRoleConfiguration;
import de.swm.gwt.client.authorization.ISecurityPlugin;
import de.swm.gwt.client.authorization.IUserRole;

/**
 * Verwaltet die Zuordnung von Rollen zu Rechten im Client, und prueft sie bei Aktionen des Benutzers.
 *
 * @copyright 2013 SWM Services GmbH
 */
public class RoleConfiguration implements IRoleConfiguration {

	private Map accessRightsToRoles = new HashMap();
	private ISecurityPlugin securityPlugin;

	/**
	 * Standard-Constructor.
	 */
	public RoleConfiguration() {
	}

	@Override
	public void setSecurityPlugin(ISecurityPlugin securityPlugin) {
		this.securityPlugin = securityPlugin;
	}

	@Override
	public void authorizeRolesForAccessRight(IAccessRight accessRight, IUserRole... userRoles) {
		accessRightsToRoles.put(accessRight, userRoles);
	}

	@Override
	public void authorizeRolesForAccessRights(IAccessRight[] accessRights,
			IUserRole[] userRoles) {
		
		for (IAccessRight accessRight : accessRights) {
			authorizeRolesForAccessRight(accessRight, userRoles);
		}
		
	}

	@Override
	public void assertAllAccessRightsConfigured(IAccessRight[] accessRights) {
		for (IAccessRight r : accessRights) {
			if (getRoles(r) == null) {
				throw new IllegalArgumentException("Keine Rollen für das Ausführungsrecht "
						+ r.toString() + " konfiguriert.");
			}
		}
	}

	/**
	 * Prueft, ob der Benutzer fuer eine Methode mit der angehaengten Liste
	 * von Rollen autorisiert ist.
	 *
	 * @param roles Rollen, die der Benutzer haben muss
	 * @return true, falls autorisiert.
	 */
	private boolean isUserMemberOf(IUserRole... roles) {

		List groups = new ArrayList();
		for (IUserRole role : roles) {
			groups.add(role.getGroup());
		}
		if (securityPlugin == null) {
			Window.alert("Please define a concrete Security framework like SWM-Accesscontrol!");
			throw new RuntimeException("Please define a concrete Security framework like SWM-Accesscontrol!");
		}
		return securityPlugin.isUserMemberOf((String[]) groups.toArray(new String[groups.size()]));
	}

	@Override
	public boolean isUserAuthorized(IAccessRight accessRight) {
		IUserRole[] roles = getRoles(accessRight);
		return (roles != null) && isUserMemberOf(roles);
	}

	/**
	 * Ermittelt die Rollen, die fuer das Ausfuehrungsrecht autorisiert sind.
	 *
	 * @param accessRight das gegebene Ausfuehrungsrecht.
	 * @return Array der autorisierten Rollen.
	 */
	public IUserRole[] getRoles(IAccessRight accessRight) {
		IUserRole[] userRoles = accessRightsToRoles.get(accessRight);
		return userRoles;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy