From the use cases that listed in this document, we list the summary of the solution below:
We recognize the needs to support #1 - #7 in the first phase. From the ACT, we haven't had users come back to us with a final statement of use, so #8 would have low priority. We are not very strict about removing access, so not sure if #9 is necessary.
ACTAccessRequirement |
---|
(original fields) |
Boolean isCertifiedUserRequired |
Boolean isValidatedProfileRequired |
Boolean isDUCRequired |
String ducTemplateFileHandleId |
Boolean isIRBApprovalRequired |
Boolean areOtherAttachmentsRequired |
Boolean isAnnualReviewRequired |
Boolean isIDUPublic |
ResearchProject |
---|
String id |
String accessRequirementId |
String institution |
String projectLead |
String intendedDataUseStatement |
String createdBy |
Long createdOn |
String modifiedBy |
Long modifiedOn |
Any user can create a ResearchProject. To create a ResearchProject, the following information are required: accessRequirementId, institution, projectLead, intendedDataUseStatement, ownerId, and createdBy. The following fields: id, createdOn, and modifiedOn are set by the system. A user will not be able to change these values.
After a ResearchProject is created, only the creator can make changes to a ResearchProject. The owner can also change the ownership of a ResearchProject by changing the ownerId value to another userId that has been granted access to the dataset under the same ResearchProject. After taking over the ResearchProject, a user would have the same permissions with the DataAccessRequest's creator.
Request implements RequestInterface |
---|
String id |
String accessRequirementId |
String createdBy |
Long createdOn |
String researchProjectId |
List<String> accessors |
String ducFileHandleId |
String irbFileHandleId |
List<String> attachments |
String modifiedBy |
Long modifiedOn |
Any user can create a Request to a given AccessRequirement. To create a Request, the following fields are required: accessRequirementId, and createdBy. The following fields: id, createdOn, and modifiedOn are set by the system. A user cannot change these values.
Only creator of Request can update, and submit the request. To submit a request, it has to meet the requirements specified in the associated AccessRequirement.
Once a request is submitted, a Submission object is created. While there is an Submission with status SUBMITTED, it's associated Request no longer available for update & submit.
Renewal implements RequestInterface extends Request |
---|
String publication |
String summaryOfUse |
Once a Submission is approved and requestor wants to add/ remove accessors, he/she needs to update the request with a Renewal, given the publication and summaryOfUse in addition to editing the existing information from the original Request.
Submitting a Renewal will also result in a Submission being created with status SUBMITTED.
Submission |
---|
String id |
String dataAccessRequestId |
String submittedBy |
Long submittedOn |
ResearchProject researchProjectSnapshot |
List<String> accessors |
Boolean isRenewalSubmission |
String ducFileHandleId |
String irbFileHandleId |
List<String> attachments |
String publication |
String summaryOfUse |
SubmissionState state (SUBMITTED, APPROVED, REJECTED, CANCELED) |
String reviewerId |
Long reviewedOn |
String rejectedReason |
Once a Submission is created, it will have state SUBMITTED until a reviewer (ACT member) review and update its status.
After a submission is Rejected and a reason is provided, the submission is closed for modification.
When an ACT member approves a submission, multiple AccessApproval are created for each accessor.
When a requestor adds/removes a user, he/she will also need to update the request and create a new submission. An ACT member will review the new submission and make decision to grant/revoke access to the accessor.
Action | Intended User | URI | Method | Request Params | Request Body | Response Body | |
---|---|---|---|---|---|---|---|
create or update Research Project | Synapse User | /researchProject | POST | ResearchProject | ResearchProject | ||
get ResearchProject for update | creator | /accessRequirement/{id}/researchProjectForUpdate | GET | ResearchProject | |||
5 | |||||||
6 | |||||||
7 | asking the server for a suitable request object to start with | creator | /accessRequirement/{id}/dataAccessRequestForUpdate | GET | RequestInterface | ||
create or update Request | Synapse User | /dataAccessRequest | POST | RequestInterface | RequestInterface | ||
9 | submit a Request | creator, | /dataAccessRequest/{id}/submission | POST | etag | SubmissionStatus | |
11 | cancel a Submission | requestor, | /dataAccessSubmission/{id}/cancellation | PUT | SubmissionStatus | ||
12 | update a Submission | ACT | /dataAccessSubmission/{id} | PUT | SubmissionStateChangeRequest | SubmissionStatus | |
13 | retrieve a list of Submission | ACT | /accessRequirement/{id}/submissions | GET | nextPageToken, order (SubmissionOrder), filter (SubmissionState), asc | SubmissionPage | |
retrieve restriction information | Synapse user | /restrictionInformation | POST | RestrictionInformationRequest | RestrictionInformationResponse | ||
16 | retrieve access requirement status | Synapse user | /accessRequirement/{id}/status | GET | AccessRequirementStatus | ||
17 | retrieve info about open submissions | ACT | /dataAccessSubmission/openSubmissions | GET | nextPageToken | OpenSubmissionPage | |
BatchAccessApprovalRequest |
---|
List<String> userIds String accessRequirementId |
BatchAccessApprovalResult |
---|
List<AccessApprovalResult> results |
AccessApprovalResult |
---|
String userId |
String accessRequirementId |
Boolean hasAccessApproval |
OpenSubmissionPage |
---|
List<OpenSubmission> openSubmissionList |
String nextPageToken |
OpenSubmission |
---|
String accessRequirementId |
Long numberOfOpenSubmissions |
ACTAccessRequirementStatus implements AccessRequirementStatus |
---|
String accessRequirementId |
Boolean isApproved |
SubmissionStatus current submissionStatus |
SubmissionStatus |
---|
String submittedBy |
String submissionId |
SubmissionState state |
String rejectedReason |
Long reviewedOn |
SubmissionStateChangeRequest |
---|
String submissionId |
SubmissionState newState (only APPROVED and REJECTED are valid) |
String rejectedReason |
RestrictionInformationRequest |
---|
String objectId |
RestrictableObjectType objectType |
RestrictionInformationResponse |
---|
RestrictionLevel restrictionLevel (OPEN, RESTRICTED_BY_TERMS_OF_USE, CONTROLLED_BY_ACT) |
boolean hasUnmet |
TermsOfUseAccessRequirementStatus implements AccessRequirementStatus |
---|
String accessRequirementId |
boolean isApproved |
Condition | Target User | Notes | |
---|---|---|---|
1 | After a new submission is created | ACT member | Includes link to a page that manages the dataset's access requests |
2 | After a submission is approved | Requestor | Includes link to view request |
3 | After a submission is rejected | Requestor | Includes reason Includes link to create a new request from the rejected one |
By May 2017, we have completed #1-4, #7 & #8 under Solution. We have implemented all APIs listed under Services. The feature is under alpha in stack-180.
From user's feedback, we still need to provide the following:
As a path moving forward, we decided that when we bring the feature out of alpha, an ACT member can continue managing access outside of Synapse, or switch to use the new system. To be able to achieve this, SWC needs to know if an ACTAccessRequirement was configured to use Synapse to keep track of Submission.
After a discussion, we conclude on: