Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

https://docs.google.com/presentation/d/1SKSzfWaOBAPdN87ivTXnLxV3ItuY7VoWANcXWeglxN0/edit?usp=sharing

 

Additional Requirements/Suggestions (from March 3 meeting):

  • need a 'batch mode' to allow a list of email addresses to be specified
  • forget the fname, lname fields
  • if a given email is already an alias in Synapse, invisibly convert into a membership invitation
  • after some expiration date, using the invitation-link should generate a membership invitation request

 

Client Responsibilities

The client is responsible for the sequence:

...

The client must ensure Synapse is logged out before the sequence begins.

 

Services

 

URIRequest MethodRequest Param'sRequest BodyResponse BodyDescriptionAuthority
/userPrecursorPOST email, fname, lname, invitation messageID, token

Create a user precursor for the given email address.

Sends email to invited user.

400 response if email has been used before.
authenticated users
/userPrecursorGETlimit, offset PaginatedResults of precursor

Returns all precursors created by the user.

(Ordered by creation time stamp?)

Precursor creator.
/userPrecursor/{id}GET----ID, token, principalID (or null), email, fname, lname Precursor creator.
/userPrecursor/{id}DELETE------

Delete user precursor.

403 status if precursor is already bound to an entity.

Precursor creator.

/userPrecursor/{id}/principal

Q: Is this the best URI?

POSTtoken----Bind a precursor to the principal of the currently authenticated user.  Any entity access records for the precursor become ACL records.Authenticated users.
/userPrecursor/{id}/access/entityPOST--entity ID, access type?

Adds the given access type to the given entity to the given precursor.

403 status if precursor is already bound to an entity.

CHANGE_PERMISSION access to the entity.
/userPrecursor/{id}/access/entity/{entityId}DELETE------

Remove all access to the given entity for the given precursor.

403 status if precursor is already bound to an entity.

CHANGE_PERMISSION access to the entity.
/userPrecursor/{id}/openInvitationGETteamId, limit, offset--PaginatedResults<MembershipInvitation>Get a paginated list of all the open membership invitations extended to a user, optionally filtering by teamId.PUBLIC

Note:  The MembershipInvtnSubmission object is extended to accept either a principal ID or a precursor ID.  So all the CRUD operations on this object now support user precursors.

 TODO:

Database

...

Tables:

  table columns: ID, token, first, last, email, principalId (initially null)

 USER_PRECURSOR

  • ID
  • TOKEN
  • PRINCIPAL_ID (can be null)
  • USER_PROFILE

 

ACL_PRECURSOR

  • ID
  • ACL_ID
  • USER_PRECURSOR_ID

 

ACL_PRECURSOR_ACCESS_TYPE

  • ID
  • ACL_PRECURSOR_ID
  • ACCESS_TYPE