package org.vertexium.inmemory;
import org.vertexium.VertexiumException;
import org.vertexium.Visibility;
import org.vertexium.security.Authorizations;
import org.vertexium.security.ColumnVisibility;
import org.vertexium.security.VisibilityEvaluator;
import org.vertexium.security.VisibilityParseException;
import org.vertexium.util.ArrayUtils;
import org.vertexium.util.Preconditions;
import java.io.Serializable;
import java.util.Arrays;
public class InMemoryAuthorizations implements org.vertexium.Authorizations, Serializable {
private static final long serialVersionUID = 1L;
private final String[] authorizations;
public InMemoryAuthorizations(String... authorizations) {
this.authorizations = authorizations;
}
@Override
public String[] getAuthorizations() {
return authorizations;
}
@Override
public boolean equals(org.vertexium.Authorizations authorizations) {
return ArrayUtils.intersectsAll(getAuthorizations(), authorizations.getAuthorizations());
}
@Override
public String toString() {
return Arrays.toString(authorizations);
}
@Override
public boolean canRead(Visibility visibility) {
Preconditions.checkNotNull(visibility, "visibility is required");
// this is just a shortcut so that we don't need to construct evaluators and visibility objects to check for an empty string.
if (visibility.getVisibilityString().length() == 0) {
return true;
}
VisibilityEvaluator visibilityEvaluator = new VisibilityEvaluator(new Authorizations(this.getAuthorizations()));
ColumnVisibility columnVisibility = new ColumnVisibility(visibility.getVisibilityString());
try {
return visibilityEvaluator.evaluate(columnVisibility);
} catch (VisibilityParseException e) {
throw new VertexiumException("could not evaluate visibility " + visibility.getVisibilityString(), e);
}
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
InMemoryAuthorizations that = (InMemoryAuthorizations) o;
return ArrayUtils.intersectsAll(getAuthorizations(), that.getAuthorizations());
}
@Override
public int hashCode() {
return Arrays.hashCode(authorizations);
}
}