private <C extends Containerable, O extends ObjectType> ObjectQuery preProcessSubobjectQuerySecurity(Class<C> containerType, Class<O> objectType, ObjectQuery origQuery, Task task, OperationResult result) throws SchemaException, ObjectNotFoundException, ExpressionEvaluationException, CommunicationException, ConfigurationException, SecurityViolationException {
ObjectFilter secParentFilter = securityEnforcer.preProcessObjectFilter(ModelAuthorizationAction.AUTZ_ACTIONS_URLS_GET, null, objectType, null, null, null, null, task, result);
if (secParentFilter == null || secParentFilter instanceof AllFilter) {
return origQuery;
}
ObjectFilter secChildFilter;
if (secParentFilter instanceof NoneFilter) {
secChildFilter = FilterCreationUtil.createNone(prismContext);
} else {
ObjectFilter origChildFilter = origQuery != null ? origQuery.getFilter() : null;
ObjectFilter secChildFilterParentPart = prismContext.queryFactory().createExists(ItemName.fromQName(PrismConstants.T_PARENT),
containerType, prismContext, secParentFilter);
if (origChildFilter == null) {
secChildFilter = secChildFilterParentPart;
} else {
secChildFilter = prismContext.queryFactory().createAnd(origChildFilter, secChildFilterParentPart);
}
}
return updateObjectQuery(origQuery, secChildFilter);
}