de.swm.gwt.client.authorization.impl.RoleConfiguration Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of swm-gwt-client Show documentation
Show all versions of swm-gwt-client Show documentation
Plain GWT Swm erweiterungen, auch zur benutzung in mobilen Geraeten
/*
* @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;
}
}