/** * Add a filter that uses the OR operator. * * <p> * This takes a variable number of parameters. Any number of <code>Filter * </code>s can be * specified. */ public static void addFilterOr(IMutableSearch search, Filter... filters) { addFilter(search, Filter.or(filters)); }
@Override public void visit(OrFilter filter) throws BadRequestServiceEx, InternalErrorServiceEx { trgFilter = Filter.or(); for (SearchFilter searchFilter : filter.getFilters()) { SearchConverter sc = new SearchConverter(); searchFilter.accept(sc); trgFilter.add(sc.trgFilter); } } }
/** * Modify the search by adding the given filters using AND semantics */ public static void mergeFiltersAnd(IMutableSearch search, List<Filter> filters) { List<Filter> list = search.getFilters(); if (list == null) { list = new ArrayList<Filter>(); search.setFilters(list); } if (list.size() == 0 || !search.isDisjunction()) { search.setDisjunction(false); list.addAll(filters); } else { search.setFilters(new ArrayList<Filter>()); // add the previous filters with an OR Filter orFilter = Filter.or(); orFilter.setValue(list); addFilter(search, orFilter); // add the new filters with AND search.setDisjunction(false); search.getFilters().addAll(filters); } }
/** * Add security filtering in order to filter out resources the user has not read access to */ public void addReadSecurityConstraints(Search searchCriteria, User user) { // no further constraints for admin user if(user.getRole() == Role.ADMIN) { return; } Filter userFiltering = Filter.equal("user.name", user.getName()); if(! user.getGroups().isEmpty()) { List<Long> groupsId = new ArrayList<>(); for (UserGroup group : user.getGroups()) { groupsId.add(group.getId()); } userFiltering = Filter.or( userFiltering, Filter.in("group.id", groupsId)); } Filter securityFilter = Filter.some( "security", Filter.and( Filter.equal("canRead", true), userFiltering ) ); searchCriteria.addFilter(securityFilter); }