use of com.yahoo.elide.annotation.Include in project elide by yahoo.
the class AggregationStorePermissionExecutorTest method filterTest.
@Test
public void filterTest() {
@Entity
@Include
@Value
@ReadPermission(expression = "user none or filter check")
class Model1 {
String filterDim;
long metric;
}
com.yahoo.elide.core.RequestScope scope = bindAndgetRequestScope(Model1.class);
PermissionExecutor executor = scope.getPermissionExecutor();
FilterExpression expression = executor.getReadPermissionFilter(ClassType.of(Model1.class), new HashSet<>(Arrays.asList("filterDim", "metric"))).orElse(null);
Assertions.assertNotNull(expression);
Assertions.assertEquals("model1.filterDim NOTNULL []", expression.toString());
@Entity
@Include
@Value
@ReadPermission(expression = "user none and filter check")
class Model2 {
String filterDim;
long metric;
}
scope = bindAndgetRequestScope(Model2.class);
executor = scope.getPermissionExecutor();
expression = executor.getReadPermissionFilter(ClassType.of(Model2.class), new HashSet<>(Arrays.asList("filterDim", "metric"))).orElse(null);
Assertions.assertNull(expression);
@Entity
@Include
@Value
@ReadPermission(expression = "user all or filter check")
class Model3 {
String filterDim;
long metric;
}
scope = bindAndgetRequestScope(Model3.class);
executor = scope.getPermissionExecutor();
expression = executor.getReadPermissionFilter(ClassType.of(Model3.class), new HashSet<>(Arrays.asList("filterDim", "metric"))).orElse(null);
Assertions.assertNull(expression);
}
use of com.yahoo.elide.annotation.Include in project elide by yahoo.
the class PermissionExecutorTest method testReadCheckExpressionForNewlyCreatedObject.
@Test
public void testReadCheckExpressionForNewlyCreatedObject() {
@Entity
@Include(rootLevel = false)
@ReadPermission(expression = "FailOp")
class Model {
}
PersistentResource resource = newResource(new Model(), Model.class, true);
RequestScope requestScope = resource.getRequestScope();
requestScope.getDictionary().bindEntity(Model.class);
assertEquals(ExpressionResult.DEFERRED, requestScope.getPermissionExecutor().checkPermission(ReadPermission.class, resource));
assertThrows(ForbiddenAccessException.class, () -> requestScope.getPermissionExecutor().executeCommitChecks());
}
use of com.yahoo.elide.annotation.Include in project elide by yahoo.
the class PermissionExecutorTest method testSuccessfulCommitChecks.
@Test
public void testSuccessfulCommitChecks() throws Exception {
@Entity
@Include(rootLevel = false)
@UpdatePermission(expression = "sampleOperation")
class Model implements SampleOperationModel {
}
PersistentResource resource = newResource(new Model(), Model.class, true);
RequestScope requestScope = resource.getRequestScope();
// Because the object is newly created, the check is DEFERRED.
assertEquals(ExpressionResult.DEFERRED, requestScope.getPermissionExecutor().checkPermission(UpdatePermission.class, resource, ALL_FIELDS));
requestScope.getPermissionExecutor().executeCommitChecks();
}
use of com.yahoo.elide.annotation.Include in project elide by yahoo.
the class PermissionExpressionBuilderTest method testAnyFieldExpressionText.
@Test
public void testAnyFieldExpressionText() {
@Entity
@Include(rootLevel = false)
@ReadPermission(expression = "user has all access AND user has no access")
class Model {
}
dictionary.bindEntity(Model.class);
PersistentResource resource = newResource(new Model(), Model.class);
Expression expression = builder.buildAnyFieldExpressions(resource, ReadPermission.class, null, null);
assertEquals("READ PERMISSION WAS INVOKED ON PersistentResource{type=model, id=null} " + "FOR EXPRESSION [((user has all access \u001B[34mWAS UNEVALUATED\u001B[m)) " + "AND ((user has no access \u001B[34mWAS UNEVALUATED\u001B[m))]", expression.toString());
expression.evaluate(Expression.EvaluationMode.ALL_CHECKS);
assertEquals("READ PERMISSION WAS INVOKED ON PersistentResource{type=model, id=null} " + "FOR EXPRESSION [((user has all access [32mPASSED[m)) " + "AND ((user has no access [31mFAILED[m))]", expression.toString());
}
use of com.yahoo.elide.annotation.Include in project elide by yahoo.
the class PermissionExecutorTest method testFailAllFieldAwareSuccessOperationFailCommit.
@Test
public void testFailAllFieldAwareSuccessOperationFailCommit() {
@Entity
@Include(rootLevel = false)
@UpdatePermission(expression = "Prefab.Role.None")
class Model {
@Id
public Long id;
@UpdatePermission(expression = "Prefab.Role.All AND FailOp")
public String field = "some data";
}
PersistentResource resource = newResource(new Model(), Model.class, true);
RequestScope requestScope = resource.getRequestScope();
assertEquals(ExpressionResult.DEFERRED, requestScope.getPermissionExecutor().checkPermission(UpdatePermission.class, resource));
assertThrows(ForbiddenAccessException.class, () -> requestScope.getPermissionExecutor().executeCommitChecks());
}
Aggregations