Exemplo n.º 1
0
  public void linkMembership(User user, Group g, MembershipType mt, boolean broadcast)
      throws Exception {
    if (log.isTraceEnabled()) {
      Tools.logMethodIn(
          log,
          LogLevel.TRACE,
          "linkMembership",
          new Object[] {"user", user, "group", g, "membershipType", mt, "broadcast", broadcast});
    }

    orgService.flush();

    if (user == null) {
      throw new InvalidNameException("Can not create membership record because user is null");
    }
    if (orgService.getUserHandler().findUserByName(user.getUserName()) == null) {
      throw new InvalidNameException(
          "Can not create membership record because user "
              + user.getUserName()
              + " does not exist.");
    }

    if (g == null) {
      throw new InvalidNameException(
          "Can not create membership record for " + user.getUserName() + " because group is null");
    }
    // Check group exist
    Group g1 = this.orgService.getGroupHandler().findGroupById(g.getId());
    if (g1 == null) {
      throw new InvalidNameException(
          "Can not create membership record for "
              + user.getUserName()
              + " because group "
              + g.getGroupName()
              + " is not exist");
    }

    if (mt == null) {
      throw new InvalidNameException(
          "Can not create membership record for "
              + user.getUserName()
              + " because membership type is null");
    }

    if (orgService.getMembershipTypeHandler().findMembershipType(mt.getName()) == null) {
      throw new InvalidNameException("MembershipType doesn't exist: " + mt.getName());
    }

    String plGroupName = getPLIDMGroupName(g.getGroupName());

    String groupId =
        getIdentitySession()
            .getPersistenceManager()
            .createGroupKey(
                plGroupName, orgService.getConfiguration().getGroupType(g.getParentId()));

    if (isCreateMembership(mt.getName(), g.getId())) {
      if (getIdentitySession().getRoleManager().getRoleType(mt.getName()) == null) {
        getIdentitySession().getRoleManager().createRoleType(mt.getName());
      }

      if (getIdentitySession()
          .getRoleManager()
          .hasRole(user.getUserName(), groupId, mt.getName())) {
        return;
      }
    }

    if (isAssociationMapped() && getAssociationMapping().equals(mt.getName())) {
      getIdentitySession()
          .getRelationshipManager()
          .associateUserByKeys(groupId, user.getUserName());
    }

    MembershipImpl membership = new MembershipImpl();
    membership.setMembershipType(mt.getName());
    membership.setUserName(user.getUserName());
    membership.setGroupId(g.getId());

    if (broadcast) {
      preSave(membership, true);
    }

    if (isCreateMembership(mt.getName(), g.getId())) {
      getIdentitySession().getRoleManager().createRole(mt.getName(), user.getUserName(), groupId);
    }

    if (broadcast) {
      postSave(membership, true);
    }
  }
Exemplo n.º 2
0
  public Collection findMembershipsByGroupId(String groupId) throws Exception {
    if (log.isTraceEnabled()) {
      Tools.logMethodIn(
          log, LogLevel.TRACE, "findMembershipsByGroup", new Object[] {"groupId", groupId});
    }

    orgService.flush();

    String plGroupName = getPLIDMGroupName(getGroupNameFromId(groupId));

    String gid =
        getIdentitySession()
            .getPersistenceManager()
            .createGroupKey(plGroupName, getGroupTypeFromId(groupId));

    Collection<Role> roles = new HashSet();

    try {
      roles = getIdentitySession().getRoleManager().findRoles(gid, null);
    } catch (Exception e) {
      // TODO:
      handleException("Identity operation error: ", e);
    }

    HashSet<MembershipImpl> memberships = new HashSet<MembershipImpl>();

    Group g = orgService.getGroupHandler().findGroupById(groupId);

    for (Role role : roles) {
      if (isCreateMembership(role.getRoleType().getName(), g.getId())) {
        MembershipImpl m = new MembershipImpl();
        m.setGroupId(g.getId());
        m.setUserName(role.getUser().getId());
        m.setMembershipType(role.getRoleType().getName());
        memberships.add(m);
      }
    }

    if (isAssociationMapped()) {

      Collection<org.picketlink.idm.api.User> users = new HashSet();

      try {
        users = getIdentitySession().getRelationshipManager().findAssociatedUsers(gid, false, null);
      } catch (Exception e) {
        // TODO:
        handleException("Identity operation error: ", e);
      }

      for (org.picketlink.idm.api.User user : users) {
        MembershipImpl m = new MembershipImpl();
        m.setGroupId(groupId);
        m.setUserName(user.getId());
        m.setMembershipType(getAssociationMapping());
        memberships.add(m);
      }
    }

    // TODO: Exo UI has harcoded casts to List
    List<MembershipImpl> results = new LinkedList<MembershipImpl>(memberships);

    if (orgService.getConfiguration().isSortMemberships()) {
      Collections.sort(results);
    }

    if (log.isTraceEnabled()) {
      Tools.logMethodOut(log, LogLevel.TRACE, "findMembershipsByGroupId", results);
    }

    return results;
  }
Exemplo n.º 3
0
  public Collection findMembershipsByUser(String userName) throws Exception {
    if (log.isTraceEnabled()) {
      Tools.logMethodIn(
          log, LogLevel.TRACE, "findMembershipsByUser", new Object[] {"userName", userName});
    }

    orgService.flush();

    Collection<Role> roles = new HashSet();

    try {
      roles = getIdentitySession().getRoleManager().findRoles(userName, null);
    } catch (Exception e) {
      // TODO:
      handleException("Identity operation error: ", e);
    }

    HashSet<MembershipImpl> memberships = new HashSet<MembershipImpl>();

    for (Role role : roles) {
      Group g = ((GroupDAOImpl) orgService.getGroupHandler()).convertGroup(role.getGroup());
      if (isCreateMembership(role.getRoleType().getName(), g.getId())) {
        MembershipImpl m = new MembershipImpl();
        m.setGroupId(g.getId());
        m.setUserName(role.getUser().getId());

        // LDAP store may return raw membership type as role type
        if (role.getRoleType().getName().equals("JBOSS_IDENTITY_MEMBERSHIP")) {
          m.setMembershipType(orgService.getConfiguration().getAssociationMembershipType());
        } else {
          m.setMembershipType(role.getRoleType().getName());
        }

        memberships.add(m);
      }
    }

    if (isAssociationMapped()) {

      Collection<org.picketlink.idm.api.Group> groups = new HashSet();

      try {
        groups = getIdentitySession().getRelationshipManager().findAssociatedGroups(userName, null);
      } catch (Exception e) {
        // TODO:
        handleException("Identity operation error: ", e);
      }

      for (org.picketlink.idm.api.Group group : groups) {
        MembershipImpl m = new MembershipImpl();
        Group g = ((GroupDAOImpl) orgService.getGroupHandler()).convertGroup(group);
        m.setGroupId(g.getId());
        m.setUserName(userName);
        m.setMembershipType(getAssociationMapping());
        memberships.add(m);
      }
    }

    Collection result = new LinkedList(memberships);

    if (log.isTraceEnabled()) {
      Tools.logMethodOut(log, LogLevel.TRACE, "findMembershipsByUser", result);
    }

    return result;
  }
Exemplo n.º 4
0
  public Collection findMembershipsByUserAndGroup(String userName, String groupId)
      throws Exception {
    if (log.isTraceEnabled()) {
      Tools.logMethodIn(
          log,
          LogLevel.TRACE,
          "findMembershipByUserAndGroup",
          new Object[] {
            "userName", userName, "groupId", groupId,
          });
    }

    orgService.flush();

    if (userName == null) {
      // julien fix : if user name is null, need to check if we do need to return a special group

      if (log.isTraceEnabled()) {
        Tools.logMethodOut(
            log, LogLevel.TRACE, "findMembershipByUserAndGroup", Collections.emptyList());
      }

      return Collections.emptyList();
    }

    String plGroupName = getPLIDMGroupName(getGroupNameFromId(groupId));

    String gid =
        getIdentitySession()
            .getPersistenceManager()
            .createGroupKey(plGroupName, getGroupTypeFromId(groupId));

    Collection<RoleType> roleTypes = new HashSet();

    try {
      roleTypes = getIdentitySession().getRoleManager().findRoleTypes(userName, gid, null);
    } catch (Exception e) {
      // TODO:
      handleException("Identity operation error: ", e);
    }

    HashSet<MembershipImpl> memberships = new HashSet<MembershipImpl>();

    for (RoleType roleType : roleTypes) {
      if (isCreateMembership(roleType.getName(), groupId)) {
        MembershipImpl m = new MembershipImpl();
        m.setGroupId(groupId);
        m.setUserName(userName);
        m.setMembershipType(roleType.getName());
        memberships.add(m);
      }
    }

    boolean associated = false;

    try {
      associated = getIdentitySession().getRelationshipManager().isAssociatedByKeys(gid, userName);
    } catch (Exception e) {
      // TODO:
      handleException("Identity operation error: ", e);
    }

    if (isAssociationMapped() && associated) {
      MembershipImpl m = new MembershipImpl();
      m.setGroupId(groupId);
      m.setUserName(userName);
      m.setMembershipType(getAssociationMapping());
      memberships.add(m);
    }

    // TODO: Exo UI has hardcoded casts to List
    Collection result = new LinkedList(memberships);

    if (log.isTraceEnabled()) {
      Tools.logMethodOut(log, LogLevel.TRACE, "findMembershipByUserAndGroup", result);
    }

    return result;
  }
Exemplo n.º 5
0
  public Membership findMembershipByUserGroupAndType(String userName, String groupId, String type)
      throws Exception {

    if (log.isTraceEnabled()) {
      Tools.logMethodIn(
          log,
          LogLevel.TRACE,
          "findMembershipByUserAndType",
          new Object[] {
            "userName", userName, "groupId", groupId, "type", type,
          });
    }

    orgService.flush();

    String plGroupName = getPLIDMGroupName(getGroupNameFromId(groupId));

    String gid =
        getIdentitySession()
            .getPersistenceManager()
            .createGroupKey(plGroupName, getGroupTypeFromId(groupId));

    boolean hasMembership = false;

    boolean associated = false;

    try {
      associated = getIdentitySession().getRelationshipManager().isAssociatedByKeys(gid, userName);
    } catch (Exception e) {
      // TODO:
      handleException("Identity operation error: ", e);
    }

    if (isAssociationMapped() && getAssociationMapping().equals(type) && associated) {
      hasMembership = true;
    }

    Role role = null;

    try {
      role = getIdentitySession().getRoleManager().getRole(type, userName, gid);
    } catch (Exception e) {
      // TODO:
      handleException("Identity operation error: ", e);
    }

    if (role != null
        && (!isAssociationMapped()
            || !getAssociationMapping().equals(role.getRoleType())
            || !ignoreMappedMembershipType(groupId))) {
      hasMembership = true;
    }

    Membership result = null;

    if (hasMembership) {

      MembershipImpl m = new MembershipImpl();
      m.setGroupId(groupId);
      m.setUserName(userName);
      m.setMembershipType(type);

      result = m;
    }

    if (log.isTraceEnabled()) {
      Tools.logMethodOut(log, LogLevel.TRACE, "findMembershipByUserGroupAndType", result);
    }

    return result;
  }
Exemplo n.º 6
0
  public Collection removeMembershipByUser(String userName, boolean broadcast) throws Exception {

    if (log.isTraceEnabled()) {
      Tools.logMethodIn(
          log,
          LogLevel.TRACE,
          "removeMembershipByUser",
          new Object[] {"userName", userName, "broadcast", broadcast});
    }

    orgService.flush();

    Collection<Role> roles = new HashSet();

    try {
      roles = getIdentitySession().getRoleManager().findRoles(userName, null);
    } catch (Exception e) {
      // TODO:
      handleException("Identity operation error: ", e);
    }

    HashSet<MembershipImpl> memberships = new HashSet<MembershipImpl>();

    for (Role role : roles) {
      MembershipImpl m = new MembershipImpl();
      Group g = ((GroupDAOImpl) orgService.getGroupHandler()).convertGroup(role.getGroup());
      m.setGroupId(g.getId());
      m.setUserName(role.getUser().getId());
      m.setMembershipType(role.getRoleType().getName());
      memberships.add(m);

      if (broadcast) {
        preDelete(m);
      }

      getIdentitySession().getRoleManager().removeRole(role);

      if (broadcast) {
        postDelete(m);
      }
    }

    if (isAssociationMapped()) {

      Collection<org.picketlink.idm.api.Group> groups = new HashSet();

      try {
        groups = getIdentitySession().getRelationshipManager().findAssociatedGroups(userName, null);
      } catch (Exception e) {
        // TODO:
        handleException("Identity operation error: ", e);
      }

      Set<String> keys = new HashSet<String>();
      keys.add(userName);

      for (org.picketlink.idm.api.Group group : groups) {
        try {
          getIdentitySession()
              .getRelationshipManager()
              .disassociateUsersByKeys(group.getKey(), keys);
        } catch (Exception e) {
          // TODO:
          handleException("Identity operation error: ", e);
        }
      }
    }

    // TODO: Exo UI has hardcoded casts to List
    return new LinkedList(memberships);
  }