Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (C) 2014 Philip Helger (www.helger.com) philip[at]helger[dot]com Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
 
 package com.helger.appbasics.security;
 
 import java.util.Map;
 import java.util.Set;
 
 
 
This is the central manager that encapsulates all security manages. This class is thread-safe under the assumption that the implementing managers are thread-safe.

Author(s):
Philip Helger
 
 public final class AccessManager extends GlobalSingleton implements IAccessManager
 {
   public static final String DEFAULT_BASE_PATH = "security/";
   public static final String FILENAME_USERS_XML = "users.xml";
   public static final String FILENAME_ROLES_XML = "roles.xml";
   public static final String FILENAME_USERGROUPS_XML = "usergroups.xml";
 
   private static final Logger s_aLogger = LoggerFactory.getLogger (AccessManager.class);
 
   private final UserManager m_aUserMgr;
   private final RoleManager m_aRoleMgr;
   private final UserGroupManager m_aUserGroupMgr;
 
   public AccessManager () throws DAOException
   {
 
     // Remember the last login date of the user
     LoggedInUserManager.getInstance ().getUserLoginCallbacks ().addCallback (new DefaultUserLoginCallback ()
     {
       @Override
       public void onUserLogin (@Nonnull final LoginInfo aInfo)
       {
         .updateUserLastLogin (aInfo.getUserID ());
       }
 
       @Override
       public void onUserLoginError (@Nonnull @Nonempty final String sUserID, @Nonnull final ELoginResult eLoginResult)
       {
         if (eLoginResult == .)
         {
           // On invalid password, update consecutive failed login count
           .updateUserLastFailedLogin (sUserID);
        }
      }
    });
  }
  public static AccessManager getInstance ()
  {
    return getGlobalSingleton (AccessManager.class);
  }

  
Reload the content of the user manager.

Throws:
com.helger.appbasics.app.dao.impl.DAOException in case reloading fails
  public void reloadUserManager () throws DAOException
  {
    .reload ();
  }

  
Reload the content of the user group manager.

Throws:
com.helger.appbasics.app.dao.impl.DAOException in case reloading fails
  public void reloadUserGroupManager () throws DAOException
  {
  }

  
Reload the content of the role manager.

Throws:
com.helger.appbasics.app.dao.impl.DAOException in case reloading fails
  public void reloadRoleManager () throws DAOException
  {
    .reload ();
  }
  // User API
  @ReturnsMutableObject (reason = "design")
  {
  }
  public IUser createNewUser (@Nonnull @Nonempty final String sLoginName,
                              @Nullable final String sEmailAddress,
                              @Nonnull @Nonempty final String sPlainTextPassword,
                              @Nullable final String sFirstName,
                              @Nullable final String sLastName,
                              @Nullable final Locale aDesiredLocale,
                              @Nullable final Map <String, ?> aCustomAttrs,
                              final boolean bDisabled)
  {
    return .createNewUser (sLoginName,
                                     sEmailAddress,
                                     sPlainTextPassword,
                                     sFirstName,
                                     sLastName,
                                     aDesiredLocale,
                                     aCustomAttrs,
                                     bDisabled);
  }
  public IUser createPredefinedUser (@Nonnull @Nonempty final String sID,
                                     @Nonnull @Nonempty final String sLoginName,
                                     @Nullable final String sEmailAddress,
                                     @Nonnull @Nonempty final String sPlainTextPassword,
                                     @Nullable final String sFirstName,
                                     @Nullable final String sLastName,
                                     @Nullable final Locale aDesiredLocale,
                                     @Nullable final Map <String, ?> aCustomAttrs,
                                     final boolean bDisabled)
  {
    return .createPredefinedUser (sID,
                                            sLoginName,
                                            sEmailAddress,
                                            sPlainTextPassword,
                                            sFirstName,
                                            sLastName,
                                            aDesiredLocale,
                                            aCustomAttrs,
                                            bDisabled);
  }
  public EChange deleteUser (@Nullable final String sUserID)
  {
    if (LoggedInUserManager.getInstance ().isUserLoggedIn (sUserID))
    {
      .warn ("Cannot delete user " + sUserID + " as the user is currently logged in!");
      return .;
    }
    return .deleteUser (sUserID);
  }
  public EChange undeleteUser (@Nullable final String sUserID)
  {
    return .undeleteUser (sUserID);
  }
  public EChange disableUser (@Nullable final String sUserID)
  {
    return .disableUser (sUserID);
  }
  public EChange enableUser (@Nullable final String sUserID)
  {
    return .enableUser (sUserID);
  }
  public boolean containsUserWithID (@Nullable final String sUserID)
  {
    return .containsUserWithID (sUserID);
  }
  public IUser getUserOfID (@Nullable final String sUserID)
  {
    return .getUserOfID (sUserID);
  }
  public IUser getUserOfLoginName (@Nullable final String sLoginName)
  {
    return .getUserOfLoginName (sLoginName);
  }
  public IUser getUserOfEmailAddress (@Nullable final String sEmailAddress)
  {
    return .getUserOfEmailAddress (sEmailAddress);
  }
  public Collection <? extends IUsergetAllUsers ()
  {
    return .getAllUsers ();
  }
  public Collection <? extends IUsergetAllActiveUsers ()
  {
    return .getAllActiveUsers ();
  }
  public Collection <? extends IUsergetAllDisabledUsers ()
  {
    return .getAllDisabledUsers ();
  }
  public Collection <? extends IUsergetAllNotDeletedUsers ()
  {
  }
  public Collection <? extends IUsergetAllDeletedUsers ()
  {
    return .getAllDeletedUsers ();
  }
  public EChange setUserData (@Nullable final String sUserID,
                              @Nonnull @Nonempty final String sNewLoginName,
                              @Nullable final String sNewEmailAddress,
                              @Nullable final String sNewFirstName,
                              @Nullable final String sNewLastName,
                              @Nullable final Locale aNewDesiredLocale,
                              @Nullable final Map <String, ?> aCustomAttrs,
                              final boolean bDisabled)
  {
    return .setUserData (sUserID,
                                   sNewLoginName,
                                   sNewEmailAddress,
                                   sNewFirstName,
                                   sNewLastName,
                                   aNewDesiredLocale,
                                   aCustomAttrs,
                                   bDisabled);
  }
  public EChange setUserPassword (@Nullable final String sUserID, @Nonnull final String sNewPlainTextPassword)
  {
    return .setUserPassword (sUserIDsNewPlainTextPassword);
  }
  public boolean areUserIDAndPasswordValid (@Nullable final String sUserID, @Nullable final String sPlainTextPassword)
  {
    return .areUserIDAndPasswordValid (sUserIDsPlainTextPassword);
  }

  
Check if the passed combination of email address (= login) and plain text password are valid

Parameters:
sEmailAddress The email address for which a user was searched
sPlainTextPassword The plain text password to validate
Returns:
true if the email address matches a user, and if the hash of the plain text password matches the stored password hash
  public boolean areUserEmailAndPasswordValid (@Nullable final String sEmailAddress,
                                               @Nullable final String sPlainTextPassword)
  {
    final IUser aUser = getUserOfLoginName (sEmailAddress);
    return aUser == null ? false : .areUserIDAndPasswordValid (aUser.getID (), sPlainTextPassword);
  }
  // UserGroup API
  @ReturnsMutableObject (reason = "design")
  {
  }
  public IUserGroup createNewUserGroup (@Nonnull @Nonempty final String sName)
  {
    return .createNewUserGroup (sName);
  }
  public IUserGroup createNewUserGroup (@Nonnull @Nonempty final String sName,
                                        @Nullable final Map <String, ?> aCustomAttrs)
  {
    return .createNewUserGroup (sNameaCustomAttrs);
  }
                                               @Nonnull @Nonempty final String sName)
  {
    return .createPredefinedUserGroup (sIDsName);
  }
  public EChange deleteUserGroup (@Nullable final String sUserGroupID)
  {
    return .deleteUserGroup (sUserGroupID);
  }
  public boolean containsUserGroupWithID (@Nullable final String sUserGroupID)
  {
    return .containsUserGroupWithID (sUserGroupID);
  }
  public boolean containsAllUserGroupsWithID (@Nullable final Collection <StringaUserGroupIDs)
  {
    return .containsAllUserGroupsWithID (aUserGroupIDs);
  }
  public IUserGroup getUserGroupOfID (@Nullable final String sUserGroupID)
  {
    return .getUserGroupOfID (sUserGroupID);
  }
  public Collection <? extends IUserGroupgetAllUserGroups ()
  {
  }
  public EChange renameUserGroup (@Nullable final String sUserGroupID, @Nonnull @Nonempty final String sNewName)
  {
    return .renameUserGroup (sUserGroupIDsNewName);
  }
  public EChange setUserGroupData (@Nullable final String sUserGroupID,
                                   @Nonnull @Nonempty final String sNewName,
                                   @Nullable final Map <String, ?> aNewCustomAttrs)
  {
    return .setUserGroupData (sUserGroupIDsNewNameaNewCustomAttrs);
  }
  public EChange assignUserToUserGroup (@Nullable final String sUserGroupID, @Nonnull @Nonempty final String sUserID)
  {
    return .assignUserToUserGroup (sUserGroupIDsUserID);
  }
  public EChange unassignUserFromUserGroup (@Nullable final String sUserGroupID, @Nullable final String sUserID)
  {
    return .unassignUserFromUserGroup (sUserGroupIDsUserID);
  }
  public EChange unassignUserFromAllUserGroups (@Nullable final String sUserID)
  {
  }
  public boolean isUserAssignedToUserGroup (@Nullable final String sUserGroupID, @Nullable final String sUserID)
  {
    return .isUserAssignedToUserGroup (sUserGroupIDsUserID);
  }
  {
  }
  {
  }
  public EChange assignRoleToUserGroup (@Nullable final String sUserGroupID, @Nonnull @Nonempty final String sRoleID)
  {
    return .assignRoleToUserGroup (sUserGroupIDsRoleID);
  }
  public EChange unassignRoleFromUserGroup (@Nullable final String sUserGroupID, @Nullable final String sRoleID)
  {
    return .unassignRoleFromUserGroup (sUserGroupIDsRoleID);
  }
  public EChange unassignRoleFromAllUserGroups (@Nullable final String sRoleID)
  {
  }
  {
  }
  {
  }
  // Role API
  @ReturnsMutableObject (reason = "design")
  {
  }
  public IRole createNewRole (@Nonnull @Nonempty final String sName)
  {
    return .createNewRole (sName);
  }
  public IRole createNewRole (@Nonnull @Nonempty final String sName, @Nullable final Map <String, ?> aCustomAttrs)
  {
    return .createNewRole (sNameaCustomAttrs);
  }
  public IRole createPredefinedRole (@Nonnull @Nonempty final String sID, @Nonnull @Nonempty final String sName)
  {
    return .createPredefinedRole (sIDsName);
  }
  public EChange deleteRole (@Nullable final String sRoleID)
  {
    if (.deleteRole (sRoleID).isUnchanged ())
      return .;
    // Since the role does not exist any more, remove it from all user groups
    return .;
  }
  public boolean containsRoleWithID (@Nullable final String sRoleID)
  {
    return .containsRoleWithID (sRoleID);
  }
  public boolean containsAllRolesWithID (@Nullable final Collection <StringaRoleIDs)
  {
    return .containsAllRolesWithID (aRoleIDs);
  }
  public IRole getRoleOfID (@Nullable final String sRoleID)
  {
    return .getRoleOfID (sRoleID);
  }
  public Collection <? extends IRolegetAllRoles ()
  {
    return .getAllRoles ();
  }
  public EChange renameRole (@Nullable final String sRoleID, @Nonnull @Nonempty final String sNewName)
  {
    return .renameRole (sRoleIDsNewName);
  }
  public EChange setRoleData (@Nullable final String sRoleID,
                              @Nonnull @Nonempty final String sNewName,
                              @Nullable final Map <String, ?> aNewCustomAttrs)
  {
    return .setRoleData (sRoleIDsNewNameaNewCustomAttrs);
  }
  public boolean hasUserRole (@Nullable final String sUserID, @Nullable final String sRoleID)
  {
    for (final IUserGroup aUserGroup : .getAllUserGroupsWithAssignedUser (sUserID))
      if (aUserGroup.containsRoleID (sRoleID))
        return true;
    return false;
  }
  public boolean hasUserAllRoles (@Nullable final String sUserID, @Nullable final Collection <StringaRoleIDs)
  {
    if (ContainerHelper.isNotEmpty (aRoleIDs))
    {
      final Collection <IUserGroupaUserGroups = .getAllUserGroupsWithAssignedUser (sUserID);
      for (final String sRoleID : aRoleIDs)
      {
        boolean bFoundRole = false;
        for (final IUserGroup aUserGroup : aUserGroups)
          if (aUserGroup.containsRoleID (sRoleID))
          {
            bFoundRole = true;
            break;
          }
        if (!bFoundRole)
          return false;
      }
    }
    return true;
  }
  public Set <StringgetAllUserRoleIDs (@Nullable final String sUserID)
  {
    final Set <Stringret = new HashSet <String> ();
    for (final IUserGroup aUserGroup : .getAllUserGroupsWithAssignedUser (sUserID))
      ret.addAll (aUserGroup.getAllContainedRoleIDs ());
    return ret;
  }
  public Set <IRolegetAllUserRoles (@Nullable final String sUserID)
  {
    final Set <StringaRoleIDs = getAllUserRoleIDs (sUserID);
    final Set <IRoleret = new HashSet <IRole> ();
    for (final String sRoleID : aRoleIDs)
    {
      final IRole aRole = getRoleOfID (sRoleID);
      if (aRole != null)
        ret.add (aRole);
      else
        .warn ("Failed to resolve role with ID '" + sRoleID + "'");
    }
    return ret;
  }
New to GrepCode? Check out our FAQ X