...
Object Changes
Access Requirement: shortDescription description → name
UI only or do we need a migration plan? We would need to
Update Synapse Web Client
Update Synapse React Client
Update all portals and SWC to use new versions of React Client
Likely cannot enforce uniqueness, but maybe we could warn when a new AR name collides with an existing one in the UI.
Enforce non-null/non-empty? Null/empty names could take on the requirement ID as a name.
...
Endpoint | Parameters/Object | Returns | Notes/Questions | Stories | |||
---|---|---|---|---|---|---|---|
??? | Need a way to identify the caller as a reviewer so we can determine if we should show the navbar item in the web client. This could be
| As a reviewer, I need an intuitive way to access the ACT/Reviewer dashboard so I can review pending requests, troubleshoot user access, and perform other data access tasks. | |||||
POST /accessRequirement/search | AccessRequirementSearchRequest | AccessRequirementSearchResponse | For all services, when to allow array filters? No auth required; ARs are public info Special behavior if the reviewerID is the ACT? Is this good enough for search? | As an ACT member, I want to be able to query for existing access requirements so I can inspect or modify them without having to navigate to a specific entity controlled by the AR. As an ACT member, I want to be able to find an AR ID using the AR name so that I can filter other queries by AR without knowing the AR ID. | |||
POST /dataAccessSubmission/search | DataAccessSubmissionSearchRequest | DataAccessSubmissionSearchResponse | Auth required ACT member will see all submissions. If the caller is not ACT, they will only see submissions on ARs for which they have the “REVIEW_SUBMISSIONS” permission. What to do about https://docs.synapse.org/rest/GET/dataAccessSubmission/openSubmissions.html ? Deprecate? | See https://sagebionetworks.jira.com/wiki/spaces/~557058fa14d697877047ec802a3e459a04898e/pages/edit-v2/2617442828?draftShareId=316dfb35-cc6b-4dc2-9e97-c6a4bf025f02 – need to refine This will support both the “Submissions” tab for all reviewers and the “Access History” tab for ACT | |||
POST /accessApproval/historysearch | AccessApprovalHistoryRequestAccessApprovalSearchRequest | AccessApprovalHistoryResponse | Is POST /accessApproval/group enough? Only difference is no history and sort, but sort could probably be added to that service.AccessApprovalSearchResponse | Status by submitter - (submitter, AR ID) is primary key | As an ACT user, I want to see the entire history of all Access Approvals so I can understand why a user may have gained or lost access on an access requirement. | GET/POST /accessRequirement/{id}/bundle | We could also just do a service to get the related projects for an AR, since a service already exists for fetching the ACL |
Objects
AccessRequirementBundle
...
Objects
AccessRequirementSearchRequest
Code Block | ||
---|---|---|
| ||
{ "title":"Access Requirement Search BundleRequest", "description":"Access Requirement and related objectsDescribes the parameters for searching Access Requirements", "properties": { "accessRequirementnameContains":{ "$reftype":"org.sagebionetworks.repo.model.AccessRequirement"string", }, "accessControlListdescription":{"A substring used to filter Access Requirements "$ref": "org.sagebionetworks.repo.model.AccessControlList" by name" }, "relatedProjectsrelatedProjectId":{ "type": "arraystring", "itemsdescription":"A {synID used to filter Access Requirements to retrieve only those that have been applied "type": "string" // synIdswithin a particular project." }, } "reviewerId":{ } } } |
AccessRequirementSearchRequest
Code Block | ||
---|---|---|
| ||
{ "type":"number", "title":"Access Requirement Search Request", "description":"DescribesA principal theID parametersused forto searchingfilter Access Requirements", to retrieve only those with the user/ or team on the ACL." "properties": { }, "nameSubstringnextPageToken": { "type": "string", "description": "A substringtoken used to filterget Accessthe Requirementsnext bypage name"of a particular search query." }, } "relatedProjectId":} } |
AccessRequirementSearchResult
Code Block | ||
---|---|---|
| ||
{ "$id": "org.sagebionetworks.repo.model.AccessRequirementSearchResult" "typetitle":"string",Access Requirement Search Result Item", "description":"AResult synIDitem usedof to filteran Access RequirementsRequirement tosearch" retrieve only those that have been applied within a particular project.""properties": { "accessRequirementId":{ }, "type": "reviewerId":{string" }, "typename":"number", { "descriptiontype": "string"A principal ID used to filter Access Requirements to retrieve} only those with the user/ or team on the ACL." }, "nextPageToken": { "reviewerIds":{ "type": "stringarray", "description": "APrincipal token used to getIDs of the next pagereviewers of a particular search querythe AR." } "items": { } } |
AccessRequirementSearchResponse
Code Block | ||
---|---|---|
| ||
{ "title":"Access Requirement Search Response", "descriptiontype":"Describes the response object for an Access Requirement search", "number" } "properties": { }, "resultsrelatedProjectIds":{ "type": "array", "items": { "$reftype": "org.sagebionetworks.repo.model.AccessRequirementBundle""string" } }, "descriptionmodifiedOn":"The results of an access requirement search { "type": "string", "format":"date-time" }, } } |
DataAccessSubmissionSearchRequestAccessRequirementSearchResponse
Code Block | ||
---|---|---|
| ||
{ "title":"Access Requirement Search RequestResponse", "description":"Describes the response parametersobject for searchingan DataAccess AccessRequirement Submissionssearch", "properties": { "accessRequirementIdresults": { "type":"stringarray", "descriptionitems":"Filter submissions by their Access Requirement ID" { }, "accessorId$ref": {"org.sagebionetworks.repo.model.AccessRequirementSearchResult" "type":"string",} "description":"AThe principalresults IDof usedan toaccess filter submissions by accessors on the submission.requirement search" }, "reviewerIdnextPageToken": { "type": "numberstring", "description": "A principal IDtoken used to filter Access Requirements to retrieve only those with get the specifiednext userpage orof teama onparticular thesearch ACLquery." }, "status": } } |
DataAccessSubmissionSearchRequest
Code Block | ||
---|---|---|
| ||
{ "title":"Access Requirement Search Request", "typedescription": "array",Describes the parameters for searching Data Access Submissions", "itemsproperties": { "$refaccessRequirementId": "org.sagebionetworks.repo.model.dataaccess.SubmissionStatus"{ }"type":"string", "description": "Filter Datasubmissions Accessby Submissionstheir toAccess show only those with the specified SubmissionStatus.Requirement ID" }, "sortaccessorId": { "type": "enumerationstring", "valuesdescription": ["CREATED_ON_ASC", "CREATED_ON_DESC"], "default": "CREATED_ON_DESC" "A principal ID used to filter submissions by accessors on the submission." }, "nextPageTokenreviewerFilter": { // TODO: check "type": "string", this field with stakeholders "descriptiontype": "string"A token, used to get the next page of a particular search query."enum": [ } } } |
DataAccessSubmissionSearchResponse
Code Block | ||
---|---|---|
| ||
{ "ACT_ONLY", "title":"Access Requirement Search Response", "description":"Describes the parameters for searching Access Requirements",DELEGATED_ONLY" ], "properties": { "resultsrequired": false { }, "typereviewerId":"array", { "itemstype":"number", { "description":"A principal ID used to filter Access "$ref": "org.sagebionetworks.repo.model.dataaccess.Submission" },Requirements to retrieve only those with the specified user or team on the ACL." }, "descriptionsort":"Submissions matching{ the search parameters" },"type": "object", "nextPageTokenproperties": { "typefield": "string", { "descriptiontype": "string"A, token used to get the next page of a particular search query." "const": "CREATED_ON" } } } |
AccessApprovalHistoryRequest
Code Block | ||
---|---|---|
| ||
{ "title":"Access Approval History Request", "descriptiondirection":"Describes the{ parameters for searching through the history of Access Approvals for a particular accessor", "properties": {"$ref": "org.sagebionetworks.repo.model.SortDirection" "accessorId": { } "type":"number",} }, "description": "The principal ID of the accessor.", "nextPageToken": { "requiredtype": true "string", }, "accessRequirementIddescription": {"A token used to get the next page of a particular search query." } } } |
DataAccessSubmissionSearchResult
Code Block | ||
---|---|---|
| ||
{
"$id": "org.sagebionetworks.repo.model.dataaccess.DataAccessSubmissionSearchResult"
"title":"Data Access Submission Search Result Item",
"description": "",
"properties": {
"submissionId": {
"type": "string"
},
"accessRequirementId":{
"type": "string"
},
"accessRequirementName": {
"type": "string"
},
"reviewerIds":{
"type": "array"
},
"submitterId": {
"description": "The principal ID of the person who created the submission."
"type": "number"
},
"accessorIds": {
"type": "array",
"description": "The principal IDs of the users who are accessors on the submission",
"items": {
"type": "number"
}
},
"state": {
"$ref": "org.sagebionetworks.repo.model.dataaccess.SubmissionState"
},
"createdOn": {
"type": "string",
"format":"date-time"
}
}
} |
DataAccessSubmissionSearchResponse
Code Block | ||
---|---|---|
| ||
{
"title":"Access Requirement Search Response",
"description":"Describes the parameters for searching Access Requirements",
"properties": {
"results": {
"type":"array",
"items": {
"$ref": "org.sagebionetworks.repo.model.dataaccess.DataAccessSubmissionSearchResult"
},
"description":"Submissions matching the search parameters"
},
"nextPageToken": {
"type": "string",
"description": "A token used to get the next page of a particular search query."
}
}
} |
AccessApprovalSearchRequest
Code Block | ||
---|---|---|
| ||
{
"title":"Access Approval History Request",
"description":"Describes the parameters for searching through the history of Access Approvals for a particular accessor",
"properties": {
"accessorId": {
"type":"number",
"description": "The principal ID of the accessor.",
"required": true
},
"accessRequirementId": {
"type": "number",
"description": "The access requirement for which access approvals should be shown.",
"required": false
},
"sort": {
"type": "enumeration",
"values": ["MODIFIED_ON_ASC", "MODIFIED_ON_DESC", "EXPIRED_ON_ASC", "EXPIRED_ON_DESC"],
"default": "MODIFIED_ON_DESC"
},
"nextPageToken": {
"type": "string",
"description": "A token used to get the next page of a particular search query."
}
}
} |
AccessApprovalSearchResult
Code Block | ||
---|---|---|
| ||
{ "$id": "org.sagebionetworks.repo.model.AccessApprovalSearchResult" "title":"Access Approval Search Result Item", "description": "The result item in an Access Approval search", "properties": { "id": { "description": "The ID of the Access Approval", "type": "string" }, "requirementId":{ "type": "string" }, "requirementName": { "type": "string" }, "reviewerIds":{ "type": "array" }, "numbersubmitterId",: { "description": "The accessprincipal requirementID forof whichthe accessperson approvalswho shouldcreated bethe shownsubmission.", "requiredtype": false"number" }, "sortstate": { "$ref": "org.sagebionetworks.repo.model.ApprovalState" }, "typemodifiedOn": "enumeration",{ "values": ["MODIFIED_ON_ASC", "MODIFIED_ON_DESC", "EXPIRED_ON_ASCtype": "string", "EXPIRED_ON_DESC"], "default": "MODIFIED_ON_DESC "format":"date-time" }, "nextPageTokenexpiredOn": { "type": "string", "format": "date-time", "description": "AThe tokendate usedthis toobject getwill the next page of a particular search query." be expired.", "title": "Expired On", "transient": true } } } |
AccessApprovalHistoryResponseAccessApprovalSearchResponse
Code Block | ||
---|---|---|
| ||
{ "title":"Access Approval HistorySearch Response", "description":"The results of an Access Approval History Request", "properties": { "results": { "type":"array", "items": { "$ref": "org.sagebionetworks.repo.model.AccessApprovalAccessApprovalSearchResult" }, "description":"The matching historyAccess ofApproval Accessinformation Approvalscorresponding matchingto the search parameters" }, "nextPageToken": { "type": "string", "description": "A token used to get the next page of a particular search query." } } } |
Deprecations
...