public boolean isRelationshipTypeSupported(IdentityObjectType fromType, IdentityObjectType toType, IdentityObjectRelationshipType relationshipType) throws IdentityException { Map<String, Set<String>> mappings = supportedRelationshipMappings.get(relationshipType.getName()); if (mappings != null && mappings.containsKey(fromType.getName())) { if (mappings.get(fromType.getName()).contains(toType.getName())) { return true; } } return false; }
private HibernateIdentityObjectRelationshipType getHibernateIdentityObjectRelationshipType(IdentityStoreInvocationContext ctx, IdentityObjectRelationshipType iot) throws IdentityException { HibernateIdentityObjectRelationshipType relationshipType = null; Session hibernateSession = getHibernateSession(ctx); try { relationshipType = (HibernateIdentityObjectRelationshipType)hibernateSession. createQuery(HibernateIdentityObjectRelationshipType.findIdentityObjectRelationshipTypeByName) .setParameter("name", iot.getName()) .uniqueResult(); } catch (Exception e) { throw new IdentityException("IdentityObjectRelationshipType[ " + iot.getName() + "] not present in the store."); } return relationshipType; }
public Set<IdentityObjectRelationship> resolveRelationships(IdentityStoreInvocationContext ctx, IdentityObject fromIdentity, IdentityObject toIdentity, IdentityObjectRelationshipType relationshipType) throws IdentityException { HibernateIdentityObject hio1 = safeGet(ctx, fromIdentity); HibernateIdentityObject hio2 = safeGet(ctx, toIdentity); org.hibernate.Query query = null; if (relationshipType == null) { query = getHibernateSession(ctx).createQuery(QUERY_RELATIONSHIP_BY_FROM_TO); } else { query = getHibernateSession(ctx).createQuery(QUERY_RELATIONSHIP_BY_FROM_TO_TYPE) .setParameter("typeName", relationshipType.getName()); } query.setParameter("fromIO", hio1) .setParameter("toIO", hio2); List<HibernateIdentityObjectRelationship> results = query.list(); return new HashSet<IdentityObjectRelationship>(results); }
public Set<IdentityObjectRelationship> resolveRelationships(IdentityStoreInvocationContext ctx, IdentityObject identity, IdentityObjectRelationshipType relationshipType, boolean parent, boolean named, String name) throws IdentityException { Set<IdentityObjectRelationship> relationships = new HashSet<IdentityObjectRelationship>(); // For any IdentityStore that supports named relationships... for (IdentityStore identityStore : configuredIdentityStores) { if (!identityStore.getSupportedFeatures().getSupportedRelationshipTypes().contains(relationshipType.getName())) { continue; } if (!named || (named && identityStore.getSupportedFeatures().isNamedRelationshipsSupported())) { IdentityStoreInvocationContext storeCtx = resolveInvocationContext(identityStore, ctx); relationships.addAll(identityStore.resolveRelationships(storeCtx, identity, relationshipType, parent, named, name)); } } return relationships; }
public boolean hasRole(User user, Group group, RoleType roleType) throws IdentityException { checkNotNullArgument(roleType, "RoleType"); checkNotNullArgument(user, "User"); checkNotNullArgument(group, "Group"); //TODO: does separate hasRelationship method in IdentityStore makes sense? Set<IdentityObjectRelationship> rels = getRepository().resolveRelationships(getInvocationContext(), createIdentityObject(group), createIdentityObject(user), ROLE); for (IdentityObjectRelationship rel : rels) { if (rel.getType().getName().equals(ROLE.getName()) && rel.getName() != null && rel.getName().equals(roleType.getName())) { return true; } } return false; }
q.setParameter("relType", relationshipType.getName());
throw new IdentityException("Relationship not supported. RelationshipType[ " + relationshipType.getName() + " ] " + "beetween: [ " + fromIO.getIdentityType().getName() + " ] and [ " + toIO.getIdentityType().getName() + " ]");
public Set<IdentityObjectRelationship> resolveRelationships(IdentityStoreInvocationContext invocationCxt, IdentityObject fromIdentity, IdentityObject toIdentity, IdentityObjectRelationshipType relationshipType) throws IdentityException { IdentityStore fromStore = resolveIdentityStore(fromIdentity); IdentityStore toStore = resolveIdentityStore(toIdentity); IdentityStoreInvocationContext toTargetCtx = resolveInvocationContext(toStore, invocationCxt); IdentityStoreInvocationContext defaultTargetCtx = resolveInvocationContext(defaultIdentityStore, invocationCxt); if (fromStore == toStore && (!RoleManagerImpl.ROLE.getName().equals(relationshipType.getName()) || fromStore.getSupportedFeatures().isNamedRelationshipsSupported())) { return fromStore.resolveRelationships(toTargetCtx, fromIdentity, toIdentity, relationshipType); } if (!hasIdentityObject(defaultTargetCtx, defaultIdentityStore, fromIdentity)) { defaultIdentityStore.createIdentityObject(defaultTargetCtx, fromIdentity.getName(), fromIdentity.getIdentityType()); } if (!hasIdentityObject(defaultTargetCtx, defaultIdentityStore, toIdentity)) { defaultIdentityStore.createIdentityObject(defaultTargetCtx, toIdentity.getName(), toIdentity.getIdentityType()); } return defaultIdentityStore.resolveRelationships(defaultTargetCtx, fromIdentity, toIdentity, relationshipType); }