@Override public DocumentReference getDocument() { return this.family.getDocumentReference(); }
@Override public DocumentReference getDocumentReference() { return this.family.getDocumentReference(); }
private boolean currentUserHasAccessRight(Family family, Right right) { if (family == null) { return false; } if (!this.authorizationService.hasAccess( this.userManager.getCurrentUser(), right, family.getDocumentReference())) { return false; } return true; }
private boolean currentUserHasAccessRight(Family family, Right right) { if (family == null) { return false; } if (!this.authorizationService.hasAccess( this.userManager.getCurrentUser(), right, family.getDocumentReference())) { return false; } return true; }
@Override public Response getFamily(String id) { this.logger.warn("Retrieving family record [{}] via REST", id); Family family = this.repository.get(id); if (family == null) { this.logger.warn(NO_SUCH_FAMILY_ERROR_MESSAGE, id); return Response.status(Status.NOT_FOUND).build(); } User currentUser = this.users.getCurrentUser(); if (!this.access.hasAccess(currentUser, Right.VIEW, family.getDocumentReference())) { this.logger.error("View access denied to user [{}] on family record [{}]", currentUser, id); return Response.status(Status.FORBIDDEN).build(); } JSONObject json = family.toJSON(); json.put("links", this.autolinker.get().forResource(getClass(), this.uriInfo).build()); return Response.ok(json, MediaType.APPLICATION_JSON_TYPE).build(); }
@Override public Response getFamily(String id) { this.logger.warn("Retrieving family record [{}] via REST", id); Family family = this.repository.getFamilyById(id); if (family == null) { this.logger.warn(NO_SUCH_FAMILY_ERROR_MESSAGE, id); return Response.status(Status.NOT_FOUND).build(); } User currentUser = this.users.getCurrentUser(); if (!this.access.hasAccess(Right.VIEW, currentUser == null ? null : currentUser.getProfileDocument(), family.getDocumentReference())) { this.logger.error("View access denied to user [{}] on family record [{}]", currentUser, id); return Response.status(Status.FORBIDDEN).build(); } JSONObject json = family.toJSON(); json.put("links", this.autolinker.get().forResource(getClass(), this.uriInfo).build()); return Response.ok(json, MediaType.APPLICATION_JSON_TYPE).build(); }
private void queryFamilies(String input, String requiredPermissions, int resultsLimit, Set<FamilySearchResult> results) { StringBuilder querySb = new StringBuilder(); querySb.append("select doc.name "); querySb.append(" from Document doc, "); querySb.append(" doc.object(PhenoTips.FamilyClass) as family "); querySb.append(" where lower(doc.name) like :").append(PhenotipsFamilyExport.INPUT_PARAMETER); querySb.append(" or lower(family.external_id) like :").append(PhenotipsFamilyExport.INPUT_PARAMETER); List<String> queryResults = runQuery(querySb.toString(), input, resultsLimit); // Process family query results for (String queryResult : queryResults) { Family family = this.familyRepository.getFamilyById(queryResult); if (family == null) { continue; } Right right = Right.toRight(requiredPermissions); if (!this.authorizationService.hasAccess( this.userManager.getCurrentUser(), right, family.getDocumentReference())) { continue; } results.add(new FamilySearchResult(family, requiredPermissions)); } }
@Override public boolean forceRemoveAllMembers(Family family, User updatingUser) { if (!this.authorizationService.hasAccess(updatingUser, Right.EDIT, family.getDocumentReference())) { return false; } try { for (Patient patient : family.getMembers()) { // remove the member without updating family document (use "batch mode") // since we don't care about it as it will be removed anyway this.removeMember(family, patient, updatingUser, true); } return true; } catch (PTException ex) { this.logger.error("Failed to unlink all patients for the family [{}]: {}", family.getId(), ex.getMessage()); return false; } }
@Override public boolean forceRemoveAllMembers(Family family, User updatingUser) { if (!this.authorizationService.hasAccess(updatingUser, Right.EDIT, family.getDocumentReference())) { return false; } try { for (Patient patient : family.getMembers()) { // remove the member without updating family document (use "batch mode") // since we don't care about it as it will be removed anyway this.removeMember(family, patient, updatingUser, true); } return true; } catch (PTException ex) { this.logger.error("Failed to unlink all patients for the family [{}]: {}", family.getId(), ex.getMessage()); return false; } }
/** * Create a new search result from a family and permissions. * * @param family contains the details of the family found * @param requiredPermission permission to extract the URL from */ public FamilySearchResult(Family family, String requiredPermission) { this.externalId = family.getExternalId(); this.id = family.getId(); this.reference = family.getDocumentReference().toString(); this.url = family.getURL(requiredPermission); setBasicDescription(); }
/** * Create a new search result from a family and permissions. * * @param family contains the details of the family found * @param requiredPermissions permissions to extract the URL from */ public FamilySearchResult(Family family, String requiredPermissions) { this.externalId = family.getExternalId(); this.id = family.getId(); this.reference = family.getDocumentReference().toString(); this.url = family.getURL(requiredPermissions); setBasicDescription(); }
private void checkIfPatientCanBeRemovedFromFamily(Family family, Patient patient, User updatingUser) throws PTException { // check rights if (!this.authorizationService.hasAccess(updatingUser, Right.EDIT, family.getDocumentReference())) { throw new PTNotEnoughPermissionsOnFamilyException(Right.EDIT, family.getId()); } if (!this.authorizationService.hasAccess(updatingUser, Right.EDIT, patient.getDocumentReference())) { throw new PTNotEnoughPermissionsOnPatientException(Right.EDIT, patient.getId()); } }
private void checkIfPatientCanBeRemovedFromFamily(Family family, Patient patient, User updatingUser) throws PTException { // check rights if (!this.authorizationService.hasAccess(updatingUser, Right.EDIT, family.getDocumentReference())) { throw new PTNotEnoughPermissionsOnFamilyException(Right.EDIT, family.getId()); } if (!this.authorizationService.hasAccess(updatingUser, Right.EDIT, patient.getDocument())) { throw new PTNotEnoughPermissionsOnPatientException(Right.EDIT, patient.getId()); } }
private void checkValidity(Family family, List<String> newMembers, User updatingUser) throws PTException { // Checks that current user has edit permissions on family if (!this.authorizationService.hasAccess(updatingUser, Right.EDIT, family.getDocumentReference())) { throw new PTNotEnoughPermissionsOnFamilyException(Right.EDIT, family.getId()); } String duplicateID = this.findDuplicate(newMembers); if (duplicateID != null) { throw new PTPedigreeContainesSamePatientMultipleTimesException(duplicateID); } // Check if every new member can be added to the family if (newMembers != null) { for (String patientId : newMembers) { Patient patient = this.patientRepository.get(patientId); checkIfPatientCanBeAddedToFamily(family, patient, updatingUser); } } }
private void checkValidity(Family family, List<String> newMembers, User updatingUser) throws PTException { // Checks that current user has edit permissions on family if (!this.authorizationService.hasAccess(updatingUser, Right.EDIT, family.getDocumentReference())) { throw new PTNotEnoughPermissionsOnFamilyException(Right.EDIT, family.getId()); } String duplicateID = this.findDuplicate(newMembers); if (duplicateID != null) { throw new PTPedigreeContainesSamePatientMultipleTimesException(duplicateID); } // Check if every new member can be added to the family if (newMembers != null) { for (String patientId : newMembers) { Patient patient = this.patientRepository.get(patientId); checkIfPatientCanBeAddedToFamily(family, patient, updatingUser); } } }
private void checkIfPatientCanBeAddedToFamily(Family family, Patient patient, User updatingUser) throws PTException { // check rights if (!this.authorizationService.hasAccess(updatingUser, Right.EDIT, family.getDocumentReference())) { throw new PTNotEnoughPermissionsOnFamilyException(Right.EDIT, family.getId()); } if (!this.authorizationService.hasAccess(updatingUser, Right.EDIT, patient.getDocument())) { throw new PTNotEnoughPermissionsOnPatientException(Right.EDIT, patient.getId()); } // check for logical problems: patient in another family Family familyForLinkedPatient = this.getFamilyForPatient(patient); if (familyForLinkedPatient != null && !familyForLinkedPatient.getId().equals(family.getId())) { throw new PTPatientAlreadyInAnotherFamilyException(patient.getId(), familyForLinkedPatient.getId()); } }
DocumentReference familyDoc = family.getDocumentReference(); XWikiDocument famDoc = xwiki.getDocument(familyDoc, context); XWikiLock xlock = famDoc.getLock(context);
private void checkIfPatientCanBeAddedToFamily(Family family, Patient patient, User updatingUser) throws PTException { // check rights if (!this.authorizationService.hasAccess(updatingUser, Right.EDIT, family.getDocumentReference())) { throw new PTNotEnoughPermissionsOnFamilyException(Right.EDIT, family.getId()); } if (!this.authorizationService.hasAccess(updatingUser, Right.EDIT, patient.getDocumentReference())) { throw new PTNotEnoughPermissionsOnPatientException(Right.EDIT, patient.getId()); } // check for logical problems: patient in another family Family familyForLinkedPatient = this.getFamilyForPatient(patient); if (familyForLinkedPatient != null && !familyForLinkedPatient.getId().equals(family.getId())) { throw new PTPatientAlreadyInAnotherFamilyException(patient.getId(), familyForLinkedPatient.getId()); } }
@Override public Boolean hasAccess(User user, Right access, EntityReference entity) { if (!ObjectUtils.allNotNull(access, entity) || access.getTargetedEntityType() == null || !access.getTargetedEntityType().contains(EntityType.DOCUMENT)) { return null; } Family family = this.familyRepository.get(entity.toString()); if (family == null) { return null; } String ownerStr = (String) this.dab.getProperty(family.getDocumentReference(), this.resolver.resolve(Owner.CLASS_REFERENCE), Owner.PROPERTY_NAME); DocumentReference owner = this.strResolver.resolve(ownerStr); if (isGuestOwner(ownerStr, user) || user != null && owner.equals(user.getProfileDocument())) { return true; } // Grant access to administrators if (this.auth.hasAccess(user, Right.ADMIN, entity)) { return true; } return null; }
@Override public boolean canDeleteFamily(Family family, User updatingUser, boolean deleteAllMembers, boolean throwException) throws PTException { try { if (family == null) { if (throwException) { throw new PTInvalidFamilyIdException(null); } return false; } if (!this.authorizationService.hasAccess(updatingUser, Right.DELETE, family.getDocumentReference())) { throw new PTNotEnoughPermissionsOnFamilyException(Right.DELETE, family.getId()); } if (deleteAllMembers) { // check permissions on all patients for (Patient patient : family.getMembers()) { if (!this.authorizationService.hasAccess(updatingUser, Right.DELETE, patient.getDocument())) { throw new PTNotEnoughPermissionsOnPatientException(Right.DELETE, patient.getId()); } } } return true; } catch (PTException ex) { if (throwException) { throw ex; } return false; } }