Problems
- The current design allows user to create a ResearchProject for an AccessRequirement. Using the created ResearchProject, a user can then create a DataAccessRequest. After filling in the information for a request, the user can submit the request. This action creates a DataAccessSubmission which will be reviewed by an ACT member. While ResearchProject and DataAccessRequest are mutable, a DataAccessSubmission captures a snapshot of the associated ResearchProject and DataAccessRequest. So that the ACT can review later what have been approved.
To make it easy for the user to add a new accessor, we allow user to create a new submission based on an approved request, or more accurately, the current ResearchProject and DataAccessRequest. So in the case, after a submission is approved, the user came back to add a new accessor, s/he will start with all information that s/he filled in before. It's ambiguous if s/he should keep the accessors who has already been approved. These questions may come up: will removing the accessors who already have access revoke their access? - An AccessRequirement is highly mutable. An AccessApproval is a record of a single user meets an AccessRequirement. However, it doesn't contain information about which conditions or which terms the user has met. An ACT could create an AccessRequirement requires A, then approve a user under A. Then the ACT can changed the AccessRequirement to require B. Now looking at the AccessApproval for an approved user, there is no information about whether a user has met A or B.
- The ACT wants to mark an AccessRequirement as requiring renewal because the data contributor wants user to come back and update us on how they have been using the data. With this use case, we only capture if an AccessRequirement requires renewal. If so, we ask the user for additional information (publication, ...) anytime they come back to add a new accessor. However, existing dataset which already established different expiration periods needs support on when a lab's approval is expired.
...
In the original request, the user would provide a list of accessors, and a renewal would also provide a list of accessors. Per our discussion with the team, renewals will now have three listsa list of different changes to an accessor:
- Accessors to Renew (users that had access before and should continue to have access).
- Accessors to Add (new users that should be added and granted access for the first time).
- Accessors to Revoke (accessors that used to have access but should no longer have access).
...
The submission will have the same three lists list for both first time submission and renewals.
...
- Only submitter can view submission status. Accessors who are not submitter will not be able to see status of submission they did not submit.
- AccessApproval will no longer be deleted. An ACT can revoke all AccessApprovals a user have for a given AccessRequirement. This API is also deprecated and will be removed.
New APIs
| Action | Intended User | URI | Method | Request Params | Request Body | Response Body |
---|
1 | list group of accessors | ACT | /accessApproval/group | POST |
GroupAccessorRequest | GroupAccessorResponse
| AccessorGroupRequest | AccessorGroupResponse |
2 | revoke group | ACT | /accessApproval/group/revoke | PUT |
| AccessorGroupRevokeRequest |
|
3 | convert ACTAccessRequirement to ManagedACTAccessRequirement | ACT | /accessRequirement/conversion | PUT |
GroupAccessorRevokeRequest | GroupAccessorRequest |
| AccessRequirementConversionRequest | AccessRequirement |
4 | retrieve approval info for user | authenticated users | /accessApproval/information | POST |
| BatchAccessApprovalInfoRequest | BatchAccessApprovalInfoResponse |
BatchAccessApprovalInfoRequest |
---|
String userId |
List<String> accessRequirementIds |
BatchAccessApprovalInfoResponse |
---|
List<AccessApprovalInfo> results |
AccessApprovalInfo |
---|
String userId |
String accessRequirementId |
Boolean hasAccessApproval |
AccessorGroupRequest |
---|
String accessRequirementId |
String submitterId |
Date expireBefore |
GroupAccessorResponse
AccessorGroupResponse |
---|
List<GroupAccessor> accessorGroups |
String nextPageToken |
AccessorGroup |
---|
String accessRequirementId |
String submitterId |
List<String> accessors |
GroupAccessorRevokeRequest
AccessorGroupRevokeRequest |
---|
String accessRequirementId |
String submitterId |
AccessRequirementConversionRequest |
---|
String accessRequirementId |
String etag |
Long currentVersion |