remove caching from user entities

Signed-off-by: Ralf Mollik <ramollik@compex-commerce.com>
diff --git a/org.eclipse.osbp.authentication.feature/feature.xml b/org.eclipse.osbp.authentication.feature/feature.xml
index 793a2e1..a7ce4d8 100644
--- a/org.eclipse.osbp.authentication.feature/feature.xml
+++ b/org.eclipse.osbp.authentication.feature/feature.xml
@@ -17,7 +17,7 @@
         label="%featureName"
         version="0.9.0.qualifier"
         provider-name="%providerName"
-		plugin="org.eclipse.osbp.authentication">
+		plugin="org.eclipse.osbp.license">
         
     <description>
         %description
diff --git a/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/dtos/mapper/UserAccountDtoMapper.java b/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/dtos/mapper/UserAccountDtoMapper.java
index ae6da79..c6373f4 100644
--- a/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/dtos/mapper/UserAccountDtoMapper.java
+++ b/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/dtos/mapper/UserAccountDtoMapper.java
@@ -766,7 +766,7 @@
     // if entities are being removed, then they are passed to the
     // #internalRemoveFromChilds method of the parent entity. So they are
     // removed directly from the list of entities.
-    childsList.mapToEntity(mapper,
+    if ( childsList != null ) childsList.mapToEntity(mapper,
     		parentEntity::addToUserAccountFilter,
     		parentEntity::internalRemoveFromUserAccountFilter);
     return null;
diff --git a/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/dtos/service/UserAccountDtoService.java b/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/dtos/service/UserAccountDtoService.java
index d0d10ba..2251636 100644
--- a/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/dtos/service/UserAccountDtoService.java
+++ b/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/dtos/service/UserAccountDtoService.java
@@ -2,10 +2,10 @@
 
 import org.eclipse.osbp.authentication.account.dtos.UserAccountDto;
 import org.eclipse.osbp.authentication.account.entities.UserAccount;
-import org.eclipse.osbp.dsl.dto.lib.services.impl.AbstractDTOServiceWithMutablePersistence;
+import org.eclipse.osbp.dsl.dto.lib.services.impl.AbstractDTOService;
 
 @SuppressWarnings("all")
-public class UserAccountDtoService extends AbstractDTOServiceWithMutablePersistence<UserAccountDto, UserAccount> {
+public class UserAccountDtoService extends AbstractDTOService<UserAccountDto, UserAccount> {
   public UserAccountDtoService() {
     // set the default persistence ID
     setPersistenceId("authentication");
diff --git a/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/dtos/service/UserAccountFilterDtoService.java b/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/dtos/service/UserAccountFilterDtoService.java
index 4ad69e1..038e4c0 100644
--- a/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/dtos/service/UserAccountFilterDtoService.java
+++ b/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/dtos/service/UserAccountFilterDtoService.java
@@ -2,10 +2,10 @@
 
 import org.eclipse.osbp.authentication.account.dtos.UserAccountFilterDto;
 import org.eclipse.osbp.authentication.account.entities.UserAccountFilter;
-import org.eclipse.osbp.dsl.dto.lib.services.impl.AbstractDTOServiceWithMutablePersistence;
+import org.eclipse.osbp.dsl.dto.lib.services.impl.AbstractDTOService;
 
 @SuppressWarnings("all")
-public class UserAccountFilterDtoService extends AbstractDTOServiceWithMutablePersistence<UserAccountFilterDto, UserAccountFilter> {
+public class UserAccountFilterDtoService extends AbstractDTOService<UserAccountFilterDto, UserAccountFilter> {
   public UserAccountFilterDtoService() {
     // set the default persistence ID
     setPersistenceId("authentication");
diff --git a/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/entities/UserAccount.java b/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/entities/UserAccount.java
index a8bf418..c009970 100644
--- a/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/entities/UserAccount.java
+++ b/org.eclipse.osbp.authentication/src-gen/org/eclipse/osbp/authentication/account/entities/UserAccount.java
@@ -4,6 +4,7 @@
 import java.util.Collections;
 import java.util.List;
 import javax.persistence.Basic;
+import javax.persistence.Cacheable;
 import javax.persistence.Column;
 import javax.persistence.DiscriminatorValue;
 import javax.persistence.Entity;
@@ -28,8 +29,9 @@
 import org.eclipse.osbp.runtime.common.annotations.UniqueEntry;
 import org.eclipse.osbp.runtime.common.validation.InfoSeverity;
 
+@Cacheable(false)
 @Entity
-@Table(name = "USER_ACCOUNT", indexes = @Index(name = "INDEX_USER_NAME", columnList = "USER_NAME"))
+@Table(name = "USER_ACCOUNT", indexes = @Index(name = "USER_ACCOUNTINDEX_USER_NAME", unique = true, columnList = "USER_NAME"))
 @DiscriminatorValue(value = "USER_ACCOUNT")
 @SuppressWarnings("all")
 public class UserAccount implements IEntity {
@@ -594,7 +596,7 @@
     	return;
     }
     
-    internalGetUserAccountFilter().add(userAccountFilter);
+    		internalGetUserAccountFilter().add(userAccountFilter);
   }
   
   /**
diff --git a/org.eclipse.osbp.authentication/src/account.entity b/org.eclipse.osbp.authentication/src/account.entity
index bd63e0a..56e7c5d 100644
--- a/org.eclipse.osbp.authentication/src/account.entity
+++ b/org.eclipse.osbp.authentication/src/account.entity
@@ -22,7 +22,7 @@
 import ns org.eclipse.osbp.authentication.account.datatypes.int
 
 package org.eclipse.osbp.authentication.account.entities {
-
+	@Cacheable(false) // disable caching for userdata to allow manipulation of user data via SQL tools
 	entity UserAccount {
 		persistenceUnit "authentication"
 		uuid String id
@@ -57,7 +57,7 @@
 				failedAttempt = 00
 			}
 		}
-		index indexUserName {
+		unique index indexUserName {
 			userName
 		}
 	}
diff --git a/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/Activator.java b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/Activator.java
index 555cfb8..20253e4 100644
--- a/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/Activator.java
+++ b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/Activator.java
@@ -14,20 +14,36 @@
  */
 package org.eclipse.osbp.authentication;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.osbp.authentication.account.entities.UserAccount;
 import org.eclipse.osbp.gitinfo.Loginfo;
+import org.eclipse.osbp.runtime.common.event.EventDispatcherEvent;
+import org.eclipse.osbp.runtime.common.event.IEventDispatcher;
+import org.eclipse.osbp.runtime.common.event.EventDispatcherEvent.EventDispatcherCommand;
+import org.eclipse.osbp.ui.api.complexdatacontainer.IComplexDataContainerChangedListener;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.util.tracker.ServiceTracker;
 
-// TODO: Auto-generated Javadoc
 /**
  * The Class Activator.
  * 
  */
-public class Activator implements BundleActivator {
+public class Activator implements BundleActivator, IEventDispatcher.Receiver {
 
 	/** The context. */
 	private static BundleContext context;
 
+	private IEventDispatcher eventDispatcher;
+
+	private ServiceTracker<IEventDispatcher, IEventDispatcher> eventDispatcherTracker;
+
+	/** The listeners which are listening for changed complex data changes. */
+	public static final List<IComplexDataContainerChangedListener> userAccountChangedListeners = new ArrayList<>();
+
 	/**
 	 * Gets the context.
 	 *
@@ -48,6 +64,26 @@
 		Loginfo li = new Loginfo();
 		li.print(Activator.class.getCanonicalName(), Activator.class.getClassLoader());
 		Activator.context = bundleContext;
+		eventDispatcherTracker = new ServiceTracker<IEventDispatcher, IEventDispatcher>(context, IEventDispatcher.class,
+				null) {
+			@Override
+			public IEventDispatcher addingService(ServiceReference<IEventDispatcher> reference) {
+				eventDispatcher = context.getService(reference);
+				if (eventDispatcher != null) {
+					eventDispatcher.addEventReceiver(Activator.this);
+				}
+
+				return null;
+			}
+
+			@Override
+			public void removedService(ServiceReference<IEventDispatcher> reference, IEventDispatcher service) {
+				eventDispatcher.removeEventReceiver(Activator.this);
+				eventDispatcher = null;
+				super.removedService(reference, service);
+			}
+		};
+		eventDispatcherTracker.open();
 	}
 
 	/*
@@ -57,7 +93,23 @@
 	 * org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
 	 */
 	public void stop(BundleContext bundleContext) throws Exception {
+		if (eventDispatcherTracker != null) {
+			eventDispatcher.removeEventReceiver(this);
+			eventDispatcher = null;
+			eventDispatcherTracker.close();
+		}
 		Activator.context = null;
 	}
 
+	@Override
+	public void receiveEvent(EventDispatcherEvent event) {
+		if ((event.getCommand() == EventDispatcherCommand.REFRESH
+				|| event.getCommand() == EventDispatcherCommand.DELETE)
+				&& event.getTopic().equals(UserAccount.class.getName())) {
+			for (IComplexDataContainerChangedListener container : userAccountChangedListeners) {
+				container.complexDataContainerChanged();
+			}
+		}
+	}
+
 }
diff --git a/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/providerimpl/UserAccessService.java b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/providerimpl/UserAccessService.java
index 777f355..c01b086 100644
--- a/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/providerimpl/UserAccessService.java
+++ b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/providerimpl/UserAccessService.java
@@ -30,6 +30,7 @@
 import java.util.Set;
 
 import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.authc.AccountException;
 import org.apache.shiro.authc.AuthenticationException;
 import org.apache.shiro.authc.credential.DefaultPasswordService;
 import org.apache.shiro.authz.AuthorizationInfo;
@@ -40,6 +41,7 @@
 import org.apache.shiro.util.ThreadContext;
 import org.apache.shiro.web.config.WebIniSecurityManagerFactory;
 import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
+import org.eclipse.osbp.authentication.Activator;
 import org.eclipse.osbp.authentication.account.dtos.UserAccountDto;
 import org.eclipse.osbp.authentication.account.dtos.UserAccountFilterDto;
 import org.eclipse.osbp.authentication.shiro.extensions.StaticRealm;
@@ -52,12 +54,13 @@
 import org.eclipse.osbp.dsl.dto.lib.impl.DtoServiceAccess;
 import org.eclipse.osbp.jpa.services.Query;
 import org.eclipse.osbp.preferences.ProductConfiguration;
-import org.eclipse.osbp.runtime.common.filter.IDTOServiceWithMutablePersistence;
+import org.eclipse.osbp.runtime.common.filter.IDTOService;
 import org.eclipse.osbp.ui.api.complexdatacontainer.IComplexDataContainerChangedListener;
 import org.eclipse.osbp.ui.api.useraccess.AbstractAuthorization;
 import org.eclipse.osbp.ui.api.useraccess.AbstractAuthorization.Action;
 import org.eclipse.osbp.ui.api.useraccess.AbstractAuthorization.Group;
 import org.eclipse.osbp.ui.api.useraccess.AbstractPosition;
+import org.eclipse.osbp.ui.api.useraccess.IBlipProcessPermissions;
 import org.eclipse.osbp.ui.api.useraccess.IOrganizationService;
 import org.eclipse.osbp.ui.api.useraccess.IPosition;
 import org.eclipse.osbp.ui.api.useraccess.ISubOrganization;
@@ -109,9 +112,6 @@
 	/** The Constant sOrganizationServices. */
 	protected static final Map<String, IOrganizationService> sOrganizationServices = new HashMap<>();
 
-	/** The listeners which are listening for changed complex data changes. */
-	protected static final Set<IComplexDataContainerChangedListener> complexDataContainerChangedListeners = new HashSet<>();
-
 	/**
 	 * Gets the organization services.
 	 *
@@ -146,14 +146,13 @@
 		SecurityUtils.setSecurityManager(sSecurityManager);
 		LOGGER.debug("{}", "security manager is set");
 		if (UserProtocol.dtoUserAccountDtoService == null) {
-			UserProtocol.dtoUserAccountDtoService = (IDTOServiceWithMutablePersistence<UserAccountDto>) DtoServiceAccess
+			UserProtocol.dtoUserAccountDtoService = (IDTOService<UserAccountDto>) DtoServiceAccess
 					.getService(UserAccountDto.class);
 		}
 		// for password encryption
 		if (UserProtocol.passwordService == null) {
 			UserProtocol.passwordService = new DefaultPasswordService();
 		}
-
 	}
 
 	protected void deactivate() {
@@ -225,7 +224,7 @@
 			UserFilterMap userFilterMap = null;
 			AbstractPosition position = null;
 			String defaultPerspective = null;
-			Collection<String> roles = null;
+			List<String> roles = null;
 			AbstractAuthorization authorization = null;
 			if (realm instanceof UserAccessAuthorizationRealm) {
 				user = ((UserAccessAuthorizationRealm) realm).findUserAccount(username);
@@ -233,9 +232,11 @@
 				position = ((UserAccessAuthorizationRealm) realm).findPositionForUser(username);
 				defaultPerspective = user.getDefaultPerspective();
 				authorization = ((UserAccessAuthorizationRealm) realm).findPermissionsForUser(username);
-			}
-			if (position != null) {
-				roles = position.getRoles();
+				if(position != null) {
+					roles = position.getRoles();
+				}
+			} else {
+				throw new AccountException("No valid realm authenticated "+username);
 			}
 			setSessionAttribute(AUTHENTICATED_BY_REALM, token.getAuthenticatedByRealm());
 			setSessionAttribute(USER_KEY, user);
@@ -596,8 +597,8 @@
 	 */
 	@SuppressWarnings("unchecked")
 	@Override
-	public Collection<String> getRoles() {
-		return (Collection<String>) getSessionAttribute(ROLES_KEY);
+	public List<String> getRoles() {
+		return (List<String>) getSessionAttribute(ROLES_KEY);
 	}
 
 	/*
@@ -705,8 +706,8 @@
 		AuthenticatingRealm realm = getAuthenticationRealm();
 		if (realm instanceof UserAccessAuthorizationRealm) {
 			Set<AbstractPosition> retcode = new HashSet<>();
+			String organizationID = ProductConfiguration.getAuthenticationOrganizationId();
 			for (Entry<String, IOrganizationService> entrySet : UserAccessService.sOrganizationServices.entrySet()) {
-				String organizationID = ProductConfiguration.getAuthenticationOrganizationId();
 				ISubOrganization organization = entrySet.getValue().getOrganization(organizationID);
 				if (organization != null) {
 					for (IPosition position : organization.getPositions()) {
@@ -761,7 +762,7 @@
 	 * (java.lang.String)
 	 */
 	@Override
-	public Collection<String> findRolesForUser(String username) {
+	public List<String> findRolesForUser(String username) {
 		AuthenticatingRealm realm = getAuthenticationRealm();
 		if (realm instanceof UserAccessAuthorizationRealm) {
 			return ((UserAccessAuthorizationRealm) realm).findRolesForUser(username);
@@ -848,8 +849,8 @@
 	 * getAllUserAccountRoles ()
 	 */
 	@Override
-	public Map<String, Collection<String>> getAllUserAccountRoles() { // NOSONAR
-		Map<String, Collection<String>> userRolesMap = new HashMap<>();
+	public Map<String, List<String>> getAllUserAccountRoles() { // NOSONAR
+		Map<String, List<String>> userRolesMap = new HashMap<>();
 		List<String> adminRoles = new ArrayList<>();
 		Query query = new Query();
 		int size = UserProtocol.getDtoUserAccountDtoService().size(query);
@@ -858,13 +859,11 @@
 			if (user.getUserName() != null && user.getPosition() != null) {
 				boolean needsDefault = true;
 				for (Entry<String, IOrganizationService> entrySet : UserAccessService.sOrganizationServices.entrySet()) {
-					// as positions in organigram are not allowed to have spaces
-
 					String organizationID = ProductConfiguration.getAuthenticationOrganizationId();
 					ISubOrganization organization = entrySet.getValue().getOrganization(organizationID);
 					if (organization != null) {
 						IPosition position = organization.getPositionByLinkAlias(user.getPosition());
-						if (position != null && position instanceof AbstractPosition) {
+						if (position instanceof AbstractPosition) {
 							userRolesMap.put(user.getUserName(), ((AbstractPosition) position).getRoles());
 							needsDefault = false;
 						}
@@ -886,7 +885,7 @@
 			adminRoles.add(IUserAccessService.DEFAULTUSERROLE);
 			adminRoles.add(IUserAccessService.DEFAULTADMINROLE);
 		}
-		userRolesMap.put(IUserAccessService.ADMINISTRATOR, adminRoles);
+		userRolesMap.put(IUserAccessService.NAME_ADMINISTRATOR, adminRoles);
 		return userRolesMap;
 	}
 
@@ -965,15 +964,15 @@
 	}
 
 	public void addComplexDataContainerChangedListener(IComplexDataContainerChangedListener listener) {
-		complexDataContainerChangedListeners.add(listener); 
+		Activator.userAccountChangedListeners.add(listener); 
 	}
 
 	public void removeComplexDataContainerChangedListener(IComplexDataContainerChangedListener listener) {
-		complexDataContainerChangedListeners.remove(listener);
+		Activator.userAccountChangedListeners.remove(listener);
 	}
 
 	public static void triggerComplexDataContainerChangedListeners() {
-		for	(IComplexDataContainerChangedListener listener : complexDataContainerChangedListeners) {
+		for	(IComplexDataContainerChangedListener listener : Activator.userAccountChangedListeners) {
 			listener.complexDataContainerChanged();
 		}
 	}
@@ -1017,5 +1016,16 @@
 			}
 		}
 	}
-	
+
+	@Override
+	public IBlipProcessPermissions getBlipProcessPermissions() {
+		String organizationID = ProductConfiguration.getAuthenticationOrganizationId();
+		for (Entry<String, IOrganizationService> entrySet : UserAccessService.sOrganizationServices.entrySet()) {
+			ISubOrganization organization = entrySet.getValue().getOrganization(organizationID);
+			if (organization != null) {
+				return entrySet.getValue().getBlipProcessPermissions();
+			}
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/providerimpl/UserProtocol.java b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/providerimpl/UserProtocol.java
index 518aa0d..29fabd3 100644
--- a/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/providerimpl/UserProtocol.java
+++ b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/providerimpl/UserProtocol.java
@@ -22,12 +22,10 @@
 import org.eclipse.osbp.jpa.services.Query;
 import org.eclipse.osbp.jpa.services.filters.LCompare;
 import org.eclipse.osbp.preferences.ProductConfiguration;
-import org.eclipse.osbp.runtime.common.filter.IDTOServiceWithMutablePersistence;
+import org.eclipse.osbp.runtime.common.filter.IDTOService;
+import org.eclipse.osbp.runtime.common.filter.IDTOService;
 import org.eclipse.osbp.ui.api.useraccess.IUserAccessService;
 import org.osgi.service.component.ComponentContext;
-import org.osgi.service.component.annotations.Reference;
-import org.osgi.service.component.annotations.ReferenceCardinality;
-import org.osgi.service.component.annotations.ReferencePolicy;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -39,7 +37,7 @@
 public class UserProtocol {
 
 	/** The dto user account dto service. */
-	protected static IDTOServiceWithMutablePersistence<UserAccountDto> dtoUserAccountDtoService = null;
+	protected static IDTOService<UserAccountDto> dtoUserAccountDtoService = null;
 
 	/** The Constant LOGGER. */
 	private static final Logger LOGGER = LoggerFactory.getLogger(UserProtocol.class);
@@ -84,7 +82,7 @@
 	 *
 	 * @return the dto user account dto service
 	 */
-	public static IDTOServiceWithMutablePersistence<UserAccountDto> getDtoUserAccountDtoService() {
+	public static IDTOService<UserAccountDto> getDtoUserAccountDtoService() {
 		return UserProtocol.dtoUserAccountDtoService;
 	}
 
@@ -178,7 +176,7 @@
 	 * @return the int
 	 */
 	public int trackFailedLoginAttempt(String username) {
-		if (IUserAccessService.ADMINISTRATOR.equals(username)) {
+		if (IUserAccessService.NAME_ADMINISTRATOR.equals(username)) {
 			return 0;
 		}
 		UserAccountDto user = findUserAccount(username);
@@ -200,7 +198,7 @@
 	 * @return true, if is account locked
 	 */
 	public boolean isAccountLocked(String username) {
-		if (IUserAccessService.ADMINISTRATOR.equals(username)) {
+		if (IUserAccessService.NAME_ADMINISTRATOR.equals(username)) {
 			return false;
 		}
 		UserAccountDto user = findUserAccount(username);
@@ -218,7 +216,7 @@
 	 * @return true, if the account is still not registered
 	 */
 	public boolean isAccountNotRegistered(String username) {
-		if (IUserAccessService.ADMINISTRATOR.equals(username)) {
+		if (IUserAccessService.NAME_ADMINISTRATOR.equals(username)) {
 			return false;
 		}
 		UserAccountDto user = findUserAccount(username);
@@ -236,7 +234,7 @@
 	 * @return true, if is account enabled
 	 */
 	public boolean isAccountEnabled(String username) {
-		if (IUserAccessService.ADMINISTRATOR.equals(username)) {
+		if (IUserAccessService.NAME_ADMINISTRATOR.equals(username)) {
 			return true;
 		}
 		UserAccountDto user = findUserAccount(username);
@@ -325,7 +323,7 @@
 				if(cookie != null) {
 					hashCode = cookie.hashCode();
 				}
-				LOGGER.debug("fraud detected as an invalid cookie was presented. expected: {} found:",user.getCookieHashCode(), hashCode);
+				LOGGER.debug("fraud detected as an invalid cookie was presented. expected:{} found:{}",user.getCookieHashCode(), hashCode);
 				return false;
 			}
 		} else {
diff --git a/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensions/IUserAccess.java b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensions/IUserAccess.java
index ba1403b..c7ed899 100644
--- a/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensions/IUserAccess.java
+++ b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensions/IUserAccess.java
@@ -15,6 +15,7 @@
 package org.eclipse.osbp.authentication.shiro.extensions;
 
 import java.util.Collection;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -22,7 +23,6 @@
 import org.eclipse.osbp.ui.api.useraccess.AbstractAuthorization;
 import org.eclipse.osbp.ui.api.useraccess.AbstractPosition;
 
-// TODO: Auto-generated Javadoc
 /**
  * The Interface IUserAccess.
  */
@@ -97,6 +97,13 @@
 	AbstractAuthorization findPermissionsForUser(String username);
 	
 	/**
+	 * Find permissions for administrator.
+	 *
+	 * @return the abstract authorization
+	 */
+	AbstractAuthorization findPermissionsForAdministrator();
+	
+	/**
 	 * Check username uniqueness.
 	 *
 	 * @param username the username
diff --git a/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensions/StaticRealm.java b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensions/StaticRealm.java
index 0a57353..d3b7ca5 100644
--- a/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensions/StaticRealm.java
+++ b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensions/StaticRealm.java
@@ -17,11 +17,11 @@
 import java.util.Calendar;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
 import org.apache.shiro.authc.AccountException;
-import org.apache.shiro.authc.AuthenticationException;
 import org.apache.shiro.authc.AuthenticationInfo;
 import org.apache.shiro.authc.AuthenticationToken;
 import org.apache.shiro.authc.DisabledAccountException;
@@ -32,14 +32,16 @@
 import org.apache.shiro.authz.AuthorizationException;
 import org.apache.shiro.authz.AuthorizationInfo;
 import org.apache.shiro.subject.PrincipalCollection;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.eclipse.osbp.authentication.account.dtos.UserAccountDto;
 import org.eclipse.osbp.authentication.providerimpl.AuthenticationInformation;
 import org.eclipse.osbp.authentication.providerimpl.AuthorizationInformation;
 import org.eclipse.osbp.authentication.shiro.extensionsimpl.UserAccessAuthorizationRealm;
 import org.eclipse.osbp.preferences.ProductConfiguration;
+import org.eclipse.osbp.ui.api.useraccess.AbstractAuthorization;
 import org.eclipse.osbp.ui.api.useraccess.AbstractPosition;
+import org.eclipse.osbp.ui.api.useraccess.IUserAccessService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * The Class StaticRealm.
@@ -49,15 +51,6 @@
 	/** The Constant LOGGER. */
 	private static final Logger LOGGER = LoggerFactory.getLogger("realm");
 	
-	/** The Constant NAME_ADMINISTRATOR. */
-	private static final String NAME_ADMINISTRATOR="Administrator";
-	
-	/** The Constant PASSWORD_ADMINISTRATOR. */
-	private static final String PASSWORD_ADMINISTRATOR="Administrator";
-	
-	/** The Constant POS_ADMINISTRATOR. */
-	private static final String POS_ADMINISTRATOR="Administrator";
-	
 	/** The static token. */
 	private IPortalAuthenticationToken staticToken = null;
 
@@ -101,7 +94,7 @@
 	 * @see org.eclipse.osbp.authentication.shiro.extensionsimpl.UserAccessAuthorizationRealm#doGetAuthenticationInfo(org.apache.shiro.authc.AuthenticationToken)
 	 */
 	@Override
-	protected AuthenticationInfo doGetAuthenticationInfo(final AuthenticationToken token) throws AuthenticationException {
+	protected AuthenticationInfo doGetAuthenticationInfo(final AuthenticationToken token) {
         staticToken = (IPortalAuthenticationToken)token;
 		if (!(token instanceof UsernamePasswordToken)) {
 			throw new IllegalStateException("Token has to be instance of UsernamePasswordToken class");
@@ -142,7 +135,7 @@
 	 */
 	@Override
     public boolean supports(AuthenticationToken token) {
-        return token != null && token instanceof IPortalAuthenticationToken &&
+        return token instanceof IPortalAuthenticationToken &&
             getPortalId().equals(((IPortalAuthenticationToken)token).getPortalId());
     }
 
@@ -162,7 +155,7 @@
 	@Override
 	public Set<String> getAllUsers() {
 		Set<String> retcode = new HashSet<>();
-		retcode.add(NAME_ADMINISTRATOR);
+		retcode.add(IUserAccessService.NAME_ADMINISTRATOR);
 		return retcode;
 	}
 
@@ -172,7 +165,7 @@
 	@Override
 	public Map<String, String> getAllUsersPositions() {
 		Map<String,String> retcode = new HashMap<>();
-		retcode.put(NAME_ADMINISTRATOR, PASSWORD_ADMINISTRATOR);
+		retcode.put(IUserAccessService.NAME_ADMINISTRATOR, IUserAccessService.PASSWORD_ADMINISTRATOR);
 		return retcode;
 	}
 
@@ -181,26 +174,34 @@
 	 */
 	@Override
 	public UserAccountDto findUserAccount(String username) {
-		if(!NAME_ADMINISTRATOR.equals(username)) {
+		if(!IUserAccessService.NAME_ADMINISTRATOR.equals(username)) {
 			return null;
 		}
 		UserAccountDto user = new UserAccountDto();
 		user.setEmail(ProductConfiguration.getAdminEmail());
 		user.setEnabled(true);
 		user.setLocked(false);
-		user.setPosition(POS_ADMINISTRATOR);
-		user.setUserName(NAME_ADMINISTRATOR);
+		user.setPosition(IUserAccessService.POS_ADMINISTRATOR);
+		user.setUserName(IUserAccessService.NAME_ADMINISTRATOR);
 		user.setPassword(encryptPassword(generatePassword()));
 		return user;
 	}
 
 	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.authentication.shiro.extensionsimpl.UserAccessAuthorizationRealm#findPositionForUser(java.lang.String)
+	 */
+	@Override
+	public AbstractPosition findPositionForUser(String username) {
+		return findPositionForPositionName(IUserAccessService.POS_ADMINISTRATOR);
+	}
+
+	/* (non-Javadoc)
 	 * @see org.eclipse.osbp.authentication.shiro.extensionsimpl.UserAccessAuthorizationRealm#findUsersForPosition(java.lang.String)
 	 */
 	@Override
 	public Set<String> findUsersForPosition(String orgNode) {
 		Set<String> retcode = new HashSet<>();
-		retcode.add(NAME_ADMINISTRATOR);
+		retcode.add(IUserAccessService.NAME_ADMINISTRATOR);
 		return retcode;
 	}
 
@@ -211,7 +212,7 @@
 	 */
 	private String generatePassword() {
 		Calendar cal = Calendar.getInstance();
-		Integer number = new Integer(cal.get(Calendar.DATE)*100);
+		Integer number = cal.get(Calendar.DATE)*100;
 		number += cal.get(Calendar.MONTH);
 		number ++; // month is idiotically 0 based
 		number += cal.get(Calendar.YEAR);
@@ -228,5 +229,9 @@
 	private String encryptPassword(String decryptedPassword) {
 		return staticToken.getUserProtocol().encryptPassword(decryptedPassword);
 	}
-
+	
+	@Override
+	public AbstractAuthorization findPermissionsForAdministrator() {
+		return null;
+	}
 }
diff --git a/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensionsimpl/UserAccessAuthorizationRealm.java b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensionsimpl/UserAccessAuthorizationRealm.java
index d3287d7..3024966 100644
--- a/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensionsimpl/UserAccessAuthorizationRealm.java
+++ b/org.eclipse.osbp.authentication/src/org/eclipse/osbp/authentication/shiro/extensionsimpl/UserAccessAuthorizationRealm.java
@@ -16,7 +16,9 @@
 
 import java.util.Collection;
 import java.util.Collections;
+import java.util.List;
 
+import org.apache.shiro.authc.AccountException;
 import org.apache.shiro.authc.AuthenticationInfo;
 import org.apache.shiro.authc.AuthenticationToken;
 import org.apache.shiro.authz.AuthorizationInfo;
@@ -82,16 +84,31 @@
 	@Override
 	public AbstractPosition findPositionForPositionName(String positionName) {
 		if (positionName != null) {
+			String organizationID = ProductConfiguration.getAuthenticationOrganizationId();
+			boolean organizationFound = false;
+			boolean organizationDefined = false;
 			for (IOrganizationService organizationService : UserAccessService.getOrganizationServices()) {
-				String organizationID = ProductConfiguration.getAuthenticationOrganizationId();
+				organizationDefined = !organizationService.getOrganizationNames().isEmpty() || organizationDefined;
 				ISubOrganization organization = organizationService.getOrganization(organizationID);
 				if (organization != null) {
+					organizationFound = true;
 					IPosition position = organization.getPositionByLinkAlias(positionName);
-					if (position != null && position instanceof AbstractPosition) {
+					if (position instanceof AbstractPosition) {
 						return (AbstractPosition) position;
 					}
 				}
 			}
+			// we found an authorizing organization but the role was not inside
+			if(organizationFound) {
+				throw new AccountException("The position "+positionName+" is not supported by the authorizing organization "+organizationID);
+			}
+			// no authorization service present - this probably is a osbp installation
+			if(UserAccessService.getOrganizationServices().isEmpty() || !organizationDefined) {
+				return null;
+			}
+		}
+		if(!UserAccessService.getOrganizationServices().isEmpty()) {
+			throw new AccountException("The user has no position assigned and cannot be authorized therefore");
 		}
 		return null;
 	}
@@ -104,7 +121,7 @@
 	 * (java.lang.String)
 	 */
 	@Override
-	public Collection<String> findRolesForUser(String username) {
+	public List<String> findRolesForUser(String username) {
 		AbstractPosition position = findPositionForUser(username);
 		if (position != null) {
 			return position.getRoles();
@@ -127,6 +144,11 @@
 		return null;
 	}
 
+	@Override
+	public AbstractAuthorization findPermissionsForAdministrator() {
+		return null;
+	}
+
 	/*
 	 * (non-Javadoc)
 	 *