public ClinicalAnalysisAclEntry(String member, ObjectMap permissions) { super(member, EnumSet.noneOf(ClinicalAnalysisAclEntry.ClinicalAnalysisPermissions.class)); EnumSet<ClinicalAnalysisAclEntry.ClinicalAnalysisPermissions> aux = EnumSet.allOf(ClinicalAnalysisAclEntry.ClinicalAnalysisPermissions.class); for (ClinicalAnalysisAclEntry.ClinicalAnalysisPermissions permission : aux) { if (permissions.containsKey(permission.name()) && permissions.getBoolean(permission.name())) { this.permissions.add(permission); } } }
.collect(Collectors.toList())); this.fullPermissionsMap.put(Entity.CLINICAL_ANALYSIS, Arrays.stream(ClinicalAnalysisAclEntry.ClinicalAnalysisPermissions.values()) .map(ClinicalAnalysisAclEntry.ClinicalAnalysisPermissions::toString) .collect(Collectors.toList()));
@Override public void checkClinicalAnalysisPermission(long studyId, long analysisId, String userId, ClinicalAnalysisAclEntry.ClinicalAnalysisPermissions permission) throws CatalogException { Query query = new Query() .append(ClinicalAnalysisDBAdaptor.QueryParams.UID.key(), analysisId) .append(ClinicalAnalysisDBAdaptor.QueryParams.STUDY_UID.key(), studyId); StudyAclEntry.StudyPermissions studyPermission; switch (permission) { case VIEW: studyPermission = StudyAclEntry.StudyPermissions.VIEW_CLINICAL_ANALYSIS; break; case UPDATE: studyPermission = StudyAclEntry.StudyPermissions.WRITE_CLINICAL_ANALYSIS; break; case DELETE: studyPermission = StudyAclEntry.StudyPermissions.DELETE_CLINICAL_ANALYSIS; break; default: throw new CatalogAuthorizationException("Permission " + permission.toString() + " not found"); } if (checkUserPermission(userId, query, studyPermission, clinicalAnalysisDBAdaptor)) { return; } throw CatalogAuthorizationException.deny(userId, permission.toString(), "ClinicalAnalysis", analysisId, null); }
private MongoCursor<Document> getMongoCursor(Query query, QueryOptions options, Document studyDocument, String user) throws CatalogDBException, CatalogAuthorizationException { Document queryForAuthorisedEntries = null; if (studyDocument != null && user != null) { // Get the document query needed to check the permissions as well queryForAuthorisedEntries = getQueryForAuthorisedEntries(studyDocument, user, StudyAclEntry.StudyPermissions.VIEW_CLINICAL_ANALYSIS.name(), ClinicalAnalysisAclEntry.ClinicalAnalysisPermissions.VIEW.name(), Entity.CLINICAL_ANALYSIS.name()); } filterOutDeleted(query); Bson bson = parseQuery(query, false, queryForAuthorisedEntries); QueryOptions qOptions; if (options != null) { qOptions = new QueryOptions(options); } else { qOptions = new QueryOptions(); } qOptions = removeInnerProjections(qOptions, QueryParams.PROBAND.key()); qOptions = removeInnerProjections(qOptions, QueryParams.FAMILY.key()); logger.debug("Clinical analysis query : {}", bson.toBsonDocument(Document.class, MongoClient.getDefaultCodecRegistry())); return clinicalCollection.nativeQuery().find(bson, qOptions).iterator(); }
@Override public QueryResult<Long> count(final Query query, final String user, final StudyAclEntry.StudyPermissions studyPermissions) throws CatalogDBException, CatalogAuthorizationException { filterOutDeleted(query); StudyAclEntry.StudyPermissions studyPermission = studyPermissions; if (studyPermission == null) { studyPermission = StudyAclEntry.StudyPermissions.VIEW_CLINICAL_ANALYSIS; } // Get the study document Query studyQuery = new Query(StudyDBAdaptor.QueryParams.UID.key(), query.getLong(QueryParams.STUDY_UID.key())); QueryResult queryResult = dbAdaptorFactory.getCatalogStudyDBAdaptor().nativeGet(studyQuery, QueryOptions.empty()); if (queryResult.getNumResults() == 0) { throw new CatalogDBException("Study " + query.getLong(QueryParams.STUDY_UID.key()) + " not found"); } // Get the document query needed to check the permissions as well Document queryForAuthorisedEntries = getQueryForAuthorisedEntries((Document) queryResult.first(), user, studyPermission.name(), studyPermission.getClinicalAnalysisPermission().name(), Entity.CLINICAL_ANALYSIS.name()); Bson bson = parseQuery(query, false, queryForAuthorisedEntries); logger.debug("Clinical count: query : {}, dbTime: {}", bson.toBsonDocument(Document.class, MongoClient.getDefaultCodecRegistry())); return clinicalCollection.count(bson); }
@Override public QueryResult groupBy(Query query, List<String> fields, QueryOptions options, String user) throws CatalogDBException, CatalogAuthorizationException { Document studyDocument = getStudyDocument(query); Document queryForAuthorisedEntries = getQueryForAuthorisedEntries(studyDocument, user, StudyAclEntry.StudyPermissions.VIEW_CLINICAL_ANALYSIS.name(), ClinicalAnalysisAclEntry.ClinicalAnalysisPermissions.VIEW.name(), Entity.CLINICAL_ANALYSIS.name()); filterOutDeleted(query); Bson bsonQuery = parseQuery(query, false, queryForAuthorisedEntries); return groupBy(clinicalCollection, bsonQuery, fields, SampleDBAdaptor.QueryParams.ID.key(), options); }
@Override public QueryResult groupBy(Query query, String field, QueryOptions options, String user) throws CatalogDBException, CatalogAuthorizationException { Document studyDocument = getStudyDocument(query); Document queryForAuthorisedEntries = getQueryForAuthorisedEntries(studyDocument, user, StudyAclEntry.StudyPermissions.VIEW_CLINICAL_ANALYSIS.name(), ClinicalAnalysisAclEntry.ClinicalAnalysisPermissions.VIEW.name(), Entity.CLINICAL_ANALYSIS.name()); filterOutDeleted(query); Bson bsonQuery = parseQuery(query, false, queryForAuthorisedEntries); return groupBy(clinicalCollection, bsonQuery, field, QueryParams.ID.key(), options); }
public ClinicalAnalysisAclEntry.ClinicalAnalysisPermissions getClinicalAnalysisPermission() { if (this.type == CLINICAL_ANALYSIS) { return ClinicalAnalysisAclEntry.ClinicalAnalysisPermissions.valueOf(this.permission); } return null; } }