@Override public void updateAttributedType(IdentityContext context, final AttributedType attributedType) { AttributedType updatedAttributedType = cloneAttributedType(context, (attributedType)); if (IdentityType.class.isInstance(attributedType)) { storeIdentityType(context, (IdentityType) updatedAttributedType); } else if (Relationship.class.isInstance(attributedType)) { storeRelationshipType((Relationship) updatedAttributedType); } }
@Override public void removeCredential(IdentityContext context, Account account, Class<? extends CredentialStorage> storageClass) { List<FileCredentialStorage> credentials = getCredentials(account, storageClass); if (credentials != null) { credentials.clear(); } flushCredentials(context.getPartition()); }
@Override protected Collection<Attribute<? extends Serializable>> getAttributes(IdentityContext context, AttributedType attributedType) { Collection<Attribute<? extends Serializable>> attributes = new HashSet<Attribute<? extends Serializable>>(); FileAttribute fileAttribute = getFileAttribute(attributedType); if (fileAttribute != null) { for (Attribute<? extends Serializable> attribute : fileAttribute.getEntry()) { attributes.add(attribute); } } return attributes; }
@Override public <P extends Partition> P get(IdentityContext identityContext, Class<P> partitionClass, String name) { try { return (P) cloneAttributedType(identityContext, (P) resolve(partitionClass, name).getEntry()); } catch (IdentityManagementException ime) { //just ignore if not found. } return null; }
@Override public boolean grantPermission(IdentityContext context, IdentityType assignee, Object resource, String operation) { Partition partition = assignee.getPartition(); FilePartition filePartition = resolve(partition.getClass(), partition.getName()); Class resourceClass = context.getPermissionHandlerPolicy().getResourceClass(resource); Serializable resourceIdentifier = context.getPermissionHandlerPolicy().getIdentifier(resource); List<Permission> existingPermissions = listPermissions(context, new IdentityPermission(resource, assignee, null)); if (existingPermissions.isEmpty()) { List<FilePermission> permissions = filePartition.getPermissions().get(assignee.getId()); if (permissions == null) { permissions = new ArrayList<FilePermission>(); filePartition.getPermissions().put(assignee.getId(), permissions); } FilePermission filePermission = new FilePermission(assignee, new IdentityPermission(resourceClass, resourceIdentifier .toString(), assignee, operation)); permissions.add(filePermission); } else { Permission permission = existingPermissions.get(0); revokePermission(context, assignee, resource, null); String newOperations = PermissionUtil.addOperation(permission.getOperation(), operation); grantPermission(context, assignee, resource, newOperations); } this.fileDataSource.flushPermissions(filePartition); return true; }
FilePartition filePartition = resolve(partition.getClass(), partition.getName()); result.add(cloneAttributedType(context, (V) fileAttributedType.getEntry())); Serializable storedValue = property.getValue(storedEntry); match = matches(condition, storedValue); } else { loadAttributes(context, storedEntry); Attribute<Serializable> attribute = storedEntry.getAttribute(attributeParameterName); match = attribute != null ? matches(condition, attribute.getValue()) : false; result.add((V) cloneAttributedType(context, storedEntry));
result.add((T) cloneAttributedType(context, storedRelationship.getEntry())); return result; loadAttributes(context, storedRelationship.getEntry()); match = matchAttribute(storedRelationship.getEntry(), attributeParameter.getName(), values); T relationship = (T) cloneAttributedType(context, storedRelationship.getEntry());
@Override public List<Permission> listPermissions(IdentityContext context, Class<?> resourceClass, Serializable identifier) { return listPermissions(context, resourceClass, identifier, null); }
@Override public void doSetAttribute(IdentityContext context, AttributedType type, Attribute<? extends Serializable> attribute) { FileAttribute fileAttribute = getFileAttribute(type); if (fileAttribute == null) { fileAttribute = new FileAttribute(type); } removeAttribute(context, type, attribute.getName()); fileAttribute.getEntry().add(attribute); this.fileDataSource.getAttributes().put(type.getId(), fileAttribute); this.fileDataSource.flushAttributes(); }
@Override public boolean revokePermission(IdentityContext context, IdentityType assignee, Object resource, String operation) { Partition partition = assignee.getPartition(); FilePartition filePartition = resolve(partition.getClass(), partition.getName()); List<FilePermission> permissions = filePartition.getPermissions().get(assignee.getId()); Class resourceClass = context.getPermissionHandlerPolicy().getResourceClass(resource); Serializable resourceIdentifier = context.getPermissionHandlerPolicy().getIdentifier(resource); if (permissions != null) { for (FilePermission filePermission : new ArrayList<FilePermission>(permissions)) { Permission permission = filePermission.getEntry(); if (hasAttributes(permission, resourceClass, resourceIdentifier, operation)) { String newOperations = PermissionUtil.removeOperation(permission.getOperation(), operation); permissions.remove(filePermission); if (operation != null && !isNullOrEmpty(newOperations)) { grantPermission(context, assignee, resource, newOperations); } } } } return false; }
private List<Permission> listPermissions(IdentityContext context, IdentityPermission query) { Partition partition = context.getPartition(); FilePartition filePartition = resolve(partition.getClass(), partition.getName()); List<Permission> permissions = new ArrayList<Permission>(); Collection<List<FilePermission>> storedPermissions = filePartition.getPermissions().values(); IdentityType referencedIdentityType = lookupIdentityById(context, filePermission.getIdentityTypeId(), context .getPartition()); boolean match = false;
@Override public <P extends Partition> List<P> get(IdentityContext identityContext, Class<P> partitionClass) { List<P> result = new ArrayList<P>(); for (FilePartition filePartition : this.fileDataSource.getPartitions().values()) { Partition partition = filePartition.getEntry(); if (Partition.class.equals(partitionClass) || partitionClass.equals(partition.getClass())) { result.add((P) cloneAttributedType(identityContext, partition)); } } return result; }
@Override public <T extends CredentialStorage> List<T> retrieveCredentials(IdentityContext context, Account account, Class<T> storageClass) { List<T> storedCredentials = new ArrayList<T>(); List<FileCredentialStorage> credentials = getCredentials(account, storageClass); for (FileCredentialStorage fileCredentialStorage : credentials) { storedCredentials.add((T) fileCredentialStorage.getEntry()); } Collections.sort(storedCredentials, new Comparator<T>() { @Override public int compare(final T o1, final T o2) { return o2.getEffectiveDate().compareTo(o1.getEffectiveDate()); } }); return storedCredentials; }
@Override public boolean grantPermission(IdentityContext context, IdentityType assignee, Object resource, String operation) { Partition partition = assignee.getPartition(); FilePartition filePartition = resolve(partition.getClass(), partition.getName()); Class resourceClass = context.getPermissionHandlerPolicy().getResourceClass(resource); Serializable resourceIdentifier = context.getPermissionHandlerPolicy().getIdentifier(resource); List<Permission> existingPermissions = listPermissions(context, new IdentityPermission(resource, assignee, null)); if (existingPermissions.isEmpty()) { List<FilePermission> permissions = filePartition.getPermissions().get(assignee.getId()); if (permissions == null) { permissions = new ArrayList<FilePermission>(); filePartition.getPermissions().put(assignee.getId(), permissions); } FilePermission filePermission = new FilePermission(assignee, new IdentityPermission(resourceClass, resourceIdentifier .toString(), assignee, operation)); permissions.add(filePermission); } else { Permission permission = existingPermissions.get(0); revokePermission(context, assignee, resource, null); String newOperations = PermissionUtil.addOperation(permission.getOperation(), operation); grantPermission(context, assignee, resource, newOperations); } this.fileDataSource.flushPermissions(filePartition); return true; }
FilePartition filePartition = resolve(partition.getClass(), partition.getName()); result.add(cloneAttributedType(context, (V) fileAttributedType.getEntry())); Serializable storedValue = property.getValue(storedEntry); match = matches(condition, storedValue); } else { loadAttributes(context, storedEntry); Attribute<Serializable> attribute = storedEntry.getAttribute(attributeParameterName); match = attribute != null ? matches(condition, attribute.getValue()) : false; result.add((V) cloneAttributedType(context, storedEntry));
@Override public <P extends Partition> P get(IdentityContext identityContext, Class<P> partitionClass, String name) { try { return (P) cloneAttributedType(identityContext, (P) resolve(partitionClass, name).getEntry()); } catch (IdentityManagementException ime) { //just ignore if not found. } return null; }
result.add((T) cloneAttributedType(context, storedRelationship.getEntry())); return result; loadAttributes(context, storedRelationship.getEntry()); match = matchAttribute(storedRelationship.getEntry(), attributeParameter.getName(), values); T relationship = (T) cloneAttributedType(context, storedRelationship.getEntry());
@Override public List<Permission> listPermissions(IdentityContext context, Class<?> resourceClass, Serializable identifier) { return listPermissions(context, resourceClass, identifier, null); }
@Override public void doSetAttribute(IdentityContext context, AttributedType type, Attribute<? extends Serializable> attribute) { FileAttribute fileAttribute = getFileAttribute(type); if (fileAttribute == null) { fileAttribute = new FileAttribute(type); } removeAttribute(context, type, attribute.getName()); fileAttribute.getEntry().add(attribute); this.fileDataSource.getAttributes().put(type.getId(), fileAttribute); this.fileDataSource.flushAttributes(); }
@Override public boolean revokePermission(IdentityContext context, IdentityType assignee, Object resource, String operation) { Partition partition = assignee.getPartition(); FilePartition filePartition = resolve(partition.getClass(), partition.getName()); List<FilePermission> permissions = filePartition.getPermissions().get(assignee.getId()); Class resourceClass = context.getPermissionHandlerPolicy().getResourceClass(resource); Serializable resourceIdentifier = context.getPermissionHandlerPolicy().getIdentifier(resource); if (permissions != null) { for (FilePermission filePermission : new ArrayList<FilePermission>(permissions)) { Permission permission = filePermission.getEntry(); if (hasAttributes(permission, resourceClass, resourceIdentifier, operation)) { String newOperations = PermissionUtil.removeOperation(permission.getOperation(), operation); permissions.remove(filePermission); if (operation != null && !isNullOrEmpty(newOperations)) { grantPermission(context, assignee, resource, newOperations); } } } } return false; }