@Override public void hasAccess( ProgramMessageQueryParams params, User user ) { ProgramInstance programInstance = null; Set<Program> programs = new HashSet<>(); if ( params.hasProgramInstance() ) { programInstance = params.getProgramInstance(); } if ( params.hasProgramStageInstance() ) { programInstance = params.getProgramStageInstance().getProgramInstance(); } if ( programInstance == null ) { throw new IllegalQueryException( "ProgramInstance or ProgramStageInstance has to be provided" ); } programs = new HashSet<>( programService.getUserPrograms( user ) ); if ( user != null && !programs.contains( programInstance.getProgram() ) ) { throw new IllegalQueryException( "User does not have access to the required program" ); } }