/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.security.userstore; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.Assert; import com.enonic.cms.core.security.group.GroupEntity; import com.enonic.cms.core.security.user.UserEntity; import com.enonic.cms.core.security.user.UserKey; import com.enonic.cms.store.dao.GroupDao; import com.enonic.cms.store.dao.UserDao; @Component public class MemberOfResolver { @Autowired private UserDao userDao; @Autowired private GroupDao groupDao; public boolean hasEnterpriseAdminPowers( final UserKey userKey ) { return hasEnterpriseAdminPowers( userDao.findByKey( userKey ) ); } public boolean hasEnterpriseAdminPowers( final UserEntity user ) { if ( user.isRoot() ) { return true; } return isMemberOfEnterpriseAdminGroup( user ); } public boolean hasUserStoreAdministratorPowers( final UserKey userKey, final UserStoreKey userStoreKey ) { return hasUserStoreAdministratorPowers( userDao.findByKey( userKey ), userStoreKey ); } public boolean hasUserStoreAdministratorPowers( final UserEntity user, final UserStoreKey userStoreKey ) { if ( hasEnterpriseAdminPowers( user ) ) { return true; } final GroupEntity userStoreAdministratorGroup = groupDao.findBuiltInUserStoreAdministrator( userStoreKey ); return isUserMemberOfGroup( user, userStoreAdministratorGroup ); } public boolean hasAdministratorPowers( UserKey userKey ) { return hasAdministratorPowers( userDao.findByKey( userKey ) ); } public boolean hasAdministratorPowers( UserEntity user ) { if ( hasEnterpriseAdminPowers( user ) ) { return true; } return isMemberOfAdministratorsGroup( user ); } public boolean hasDeveloperPowers( UserKey userKey ) { return hasDeveloperPowers( userDao.findByKey( userKey ) ); } public boolean hasDeveloperPowers( UserEntity user ) { if ( hasAdministratorPowers( user ) ) { return true; } return isMemberOfDevelopersGroup( user ); } public boolean hasExpertContributorPowers( UserEntity user ) { if ( hasDeveloperPowers( user ) ) { return true; } return isMemberOfExpertContributorGroup( user ); } public boolean hasExpertContributorPowers( UserKey userKey ) { return hasExpertContributorPowers( userDao.findByKey( userKey ) ); } public boolean hasContributorPowers( UserEntity user ) { if ( hasExpertContributorPowers( user ) ) { return true; } return isMemberOfContributorGroup( user ); } public boolean hasContributorPowers( UserKey userKey ) { return hasContributorPowers( userDao.findByKey( userKey ) ); } public boolean isMemberOfEnterpriseAdminGroup( final UserEntity user ) { GroupEntity group = groupDao.findBuiltInEnterpriseAdministrator(); return isUserMemberOfGroup( user, group ); } public boolean isMemberOfAdministratorsGroup( final UserEntity user ) { GroupEntity group = groupDao.findBuiltInAdministrator(); return isUserMemberOfGroup( user, group ); } public boolean isMemberOfDevelopersGroup( final UserEntity user ) { GroupEntity group = groupDao.findBuiltInDeveloper(); return isUserMemberOfGroup( user, group ); } public boolean isMemberOfContributorGroup( final UserEntity user ) { GroupEntity group = groupDao.findBuiltInContributor(); return isUserMemberOfGroup( user, group ); } public boolean isMemberOfExpertContributorGroup( final UserEntity user ) { GroupEntity group = groupDao.findBuiltInExpertContributor(); return isUserMemberOfGroup( user, group ); } public boolean isUserMemberOfGroup( final UserEntity user, final GroupEntity group ) { Assert.notNull( user, "user cannot be null" ); Assert.notNull( group, "group cannot be null" ); // Check if Anonymous group is member of the group GroupEntity anonymousGroup = groupDao.findBuiltInAnonymous(); if ( anonymousGroup.isMemberOf( group, true ) ) { return true; } // Check if Authenticated user is member of the group UserStoreKey userStoreKey = user.getUserStoreKey(); if ( userStoreKey != null && !user.isAnonymous() ) { GroupEntity authenticatedGroup = groupDao.findBuiltInAuthenticatedUsers( userStoreKey ); if ( authenticatedGroup.isMemberOf( group, true ) ) { return true; } } return user.isMemberOf( group, true ); } }