DB: Tables for the person side of Collabs (i.e. direct-Grants they got)
Until now I've managed to avoid having to implement this piece quite easily. The only temptation to implement it has been pseudo-client features, which are basically just a workaround until Vervis gets a separate client app. But now, Person actors need to be able to automatically send delegator-Grants when they receive a direct-Grant from a resource they either asked to Join or got an Invite to. So, this creates a need to track these joins and invites on the server side. I'm not checking the exact minimal pieces necessary for delegator-Grants. Instead, I'm starting a full implementation of the person-side of Collab records (AKA direct-Grants), called Permit records. This will also allow very convenient display of these Grants and the extensions received through them, as well as UI buttons such as accepting/rejecting a received Join or Invite.
This commit is contained in:
parent
88e6818edc
commit
05d3a1eaef
4 changed files with 377 additions and 1 deletions
182
migrations/564_2023-11-22_permit.model
Normal file
182
migrations/564_2023-11-22_permit.model
Normal file
|
@ -0,0 +1,182 @@
|
||||||
|
Permit
|
||||||
|
person PersonId
|
||||||
|
role Role
|
||||||
|
|
||||||
|
-------------------------------- Permit topic --------------------------------
|
||||||
|
|
||||||
|
PermitTopicLocal
|
||||||
|
permit PermitId
|
||||||
|
|
||||||
|
UniquePermitTopicLocal permit
|
||||||
|
|
||||||
|
PermitTopicRepo
|
||||||
|
permit PermitTopicLocalId
|
||||||
|
repo RepoId
|
||||||
|
|
||||||
|
UniquePermitTopicRepo permit
|
||||||
|
|
||||||
|
PermitTopicDeck
|
||||||
|
permit PermitTopicLocalId
|
||||||
|
deck DeckId
|
||||||
|
|
||||||
|
UniquePermitTopicDeck permit
|
||||||
|
|
||||||
|
PermitTopicLoom
|
||||||
|
permit PermitTopicLocalId
|
||||||
|
loom LoomId
|
||||||
|
|
||||||
|
UniquePermitTopicLoom permit
|
||||||
|
|
||||||
|
PermitTopicProject
|
||||||
|
permit PermitTopicLocalId
|
||||||
|
project ProjectId
|
||||||
|
|
||||||
|
UniquePermitTopicProject permit
|
||||||
|
|
||||||
|
PermitTopicGroup
|
||||||
|
permit PermitTopicLocalId
|
||||||
|
group GroupId
|
||||||
|
|
||||||
|
UniquePermitTopicGroup permit
|
||||||
|
|
||||||
|
PermitTopicRemote
|
||||||
|
permit PermitId
|
||||||
|
actor RemoteActorId
|
||||||
|
|
||||||
|
UniquePermitTopicRemote permit
|
||||||
|
|
||||||
|
------------------------------- Permit reason --------------------------------
|
||||||
|
|
||||||
|
PermitFulfillsTopicCreation
|
||||||
|
permit PermitId
|
||||||
|
|
||||||
|
UniquePermitFulfillsTopicCreation permit
|
||||||
|
|
||||||
|
PermitFulfillsInvite
|
||||||
|
permit PermitId
|
||||||
|
|
||||||
|
UniquePermitFulfillsInvite permit
|
||||||
|
|
||||||
|
PermitFulfillsJoin
|
||||||
|
permit PermitId
|
||||||
|
|
||||||
|
UniquePermitFulfillsJoin permit
|
||||||
|
|
||||||
|
-- Person's gesture
|
||||||
|
--
|
||||||
|
-- Join: Witnesses the initial Join that started the sequence
|
||||||
|
-- Invite: Witnesses their approval, seeing the topic's accept, and then
|
||||||
|
-- sending their own accept
|
||||||
|
-- Create: Records the Create activity that created the topic
|
||||||
|
|
||||||
|
PermitPersonGesture
|
||||||
|
permit PermitId
|
||||||
|
activity OutboxItemId
|
||||||
|
|
||||||
|
UniquePermitPersonGesture permit
|
||||||
|
UniquePermitPersonGestureActivity activity
|
||||||
|
|
||||||
|
-- Topic collaborator's gesture
|
||||||
|
--
|
||||||
|
-- Join: N/A (it happens but we don't record it)
|
||||||
|
-- Invite: Witnesses the initial Invite that started the sequence
|
||||||
|
|
||||||
|
PermitTopicGestureLocal
|
||||||
|
fulfills PermitFulfillsInviteId
|
||||||
|
invite OutboxItemId
|
||||||
|
|
||||||
|
UniquePermitTopicGestureLocal fulfills
|
||||||
|
UniquePermitTopicGestureLocalInvite invite
|
||||||
|
|
||||||
|
PermitTopicGestureRemote
|
||||||
|
fulfills PermitFulfillsInviteId
|
||||||
|
actor RemoteActorId
|
||||||
|
invite RemoteActivityId
|
||||||
|
|
||||||
|
UniquePermitTopicGestureRemote fulfills
|
||||||
|
UniquePermitTopicGestureRemoteInvite invite
|
||||||
|
|
||||||
|
-- Topic's accept
|
||||||
|
--
|
||||||
|
-- Join: N/A
|
||||||
|
-- Invite: Witnesses that the topic saw and approved the Invite
|
||||||
|
|
||||||
|
PermitTopicAcceptLocal
|
||||||
|
fulfills PermitFulfillsInviteId
|
||||||
|
topic PermitTopicLocalId
|
||||||
|
accept OutboxItemId
|
||||||
|
|
||||||
|
UniquePermitTopicAcceptLocal fulfills
|
||||||
|
UniquePermitTopicAcceptLocalTopic topic
|
||||||
|
UniquePermitTopicAcceptLocalAccept accept
|
||||||
|
|
||||||
|
PermitTopicAcceptRemote
|
||||||
|
fulfills PermitFulfillsInviteId
|
||||||
|
topic PermitTopicRemoteId
|
||||||
|
accept RemoteActivityId
|
||||||
|
|
||||||
|
UniquePermitTopicAcceptRemote fulfills
|
||||||
|
UniquePermitTopicAcceptRemoteTopic topic
|
||||||
|
UniquePermitTopicAcceptRemoteAccept accept
|
||||||
|
|
||||||
|
-------------------------------- Permit enable -------------------------------
|
||||||
|
|
||||||
|
-- Topic's grant
|
||||||
|
--
|
||||||
|
-- Join: Seeing the new-collaborator's Join and existing-collaborator's Accept,
|
||||||
|
-- the topic has made the link official and sent a direct-grant
|
||||||
|
-- Invite: Seeing existing-collaborator's Invite and new-collaborator's Accept,
|
||||||
|
-- the topic has made the link official and sent a direct-grant
|
||||||
|
|
||||||
|
PermitTopicEnableLocal
|
||||||
|
permit PermitPersonGestureId
|
||||||
|
topic PermitTopicLocalId
|
||||||
|
grant OutboxItemId
|
||||||
|
|
||||||
|
UniquePermitTopicEnableLocal permit
|
||||||
|
UniquePermitTopicEnableLocalTopic topic
|
||||||
|
UniquePermitTopicEnableLocalGrant grant
|
||||||
|
|
||||||
|
PermitTopicEnableRemote
|
||||||
|
permit PermitPersonGestureId
|
||||||
|
topic PermitTopicRemoteId
|
||||||
|
grant RemoteActivityId
|
||||||
|
|
||||||
|
UniquePermitTopicEnableRemote permit
|
||||||
|
UniquePermitTopicEnableRemoteTopic topic
|
||||||
|
UniquePermitTopicEnableRemoteGrant grant
|
||||||
|
|
||||||
|
----------------------- Permit delegator+extension ---------------------------
|
||||||
|
|
||||||
|
-- This section is only for Project or Team topics
|
||||||
|
-- Person sends delegator-Grant, topic starts sending extension-Grants
|
||||||
|
|
||||||
|
-- Witnesses that the person used the direct-Grant to send a delegator-Grant to
|
||||||
|
-- the topic
|
||||||
|
PermitPersonSendDelegator
|
||||||
|
permit PermitPersonGestureId
|
||||||
|
grant OutboxItemId
|
||||||
|
|
||||||
|
UniquePermitPersonSendDelegator permit
|
||||||
|
UniquePermitPersonSendDelegatorGrant grant
|
||||||
|
|
||||||
|
-- Witnesses extension-Grants that the topic has sent, extending chains from
|
||||||
|
-- its components/subprojects or projects/superteams
|
||||||
|
|
||||||
|
PermitTopicExtendLocal
|
||||||
|
permit PermitPersonSendDelegatorId
|
||||||
|
topic PermitTopicEnableLocalId
|
||||||
|
grant OutboxItemId
|
||||||
|
|
||||||
|
UniquePermitTopicExtendLocal permit
|
||||||
|
UniquePermitTopicExtendLocalTopic topic
|
||||||
|
UniquePermitTopicExtendLocalGrant grant
|
||||||
|
|
||||||
|
PermitTopicExtendRemote
|
||||||
|
permit PermitPersonSendDelegatorId
|
||||||
|
topic PermitTopicEnableRemoteId
|
||||||
|
grant RemoteActivityId
|
||||||
|
|
||||||
|
UniquePermitTopicExtendRemote permit
|
||||||
|
UniquePermitTopicExtendRemoteTopic topic
|
||||||
|
UniquePermitTopicExtendRemoteGrant grant
|
|
@ -3119,6 +3119,8 @@ changes hLocal ctx =
|
||||||
, renameField "ComponentFurtherRemote" "collabNew" "collab"
|
, renameField "ComponentFurtherRemote" "collabNew" "collab"
|
||||||
-- 563
|
-- 563
|
||||||
, addUnique' "ComponentFurtherRemote" "" ["component", "collab"]
|
, addUnique' "ComponentFurtherRemote" "" ["component", "collab"]
|
||||||
|
-- 564
|
||||||
|
, addEntities model_564_permit
|
||||||
]
|
]
|
||||||
|
|
||||||
migrateDB
|
migrateDB
|
||||||
|
|
|
@ -66,6 +66,7 @@ module Vervis.Migration.Entities
|
||||||
, model_542_component
|
, model_542_component
|
||||||
, model_551_group_collab
|
, model_551_group_collab
|
||||||
, model_552_collab_deleg
|
, model_552_collab_deleg
|
||||||
|
, model_564_permit
|
||||||
)
|
)
|
||||||
where
|
where
|
||||||
|
|
||||||
|
@ -256,3 +257,6 @@ model_551_group_collab = $(schema "551_2023-11-21_group_collab")
|
||||||
|
|
||||||
model_552_collab_deleg :: [Entity SqlBackend]
|
model_552_collab_deleg :: [Entity SqlBackend]
|
||||||
model_552_collab_deleg = $(schema "552_2023-11-21_collab_deleg")
|
model_552_collab_deleg = $(schema "552_2023-11-21_collab_deleg")
|
||||||
|
|
||||||
|
model_564_permit :: [Entity SqlBackend]
|
||||||
|
model_564_permit = $(schema "564_2023-11-22_permit")
|
||||||
|
|
190
th/models
190
th/models
|
@ -577,7 +577,7 @@ RemoteMessage
|
||||||
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
-- Collaborators
|
-- Collaborators, from resource perspective
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
Collab
|
Collab
|
||||||
|
@ -745,6 +745,194 @@ CollabDelegRemote
|
||||||
UniqueCollabDelegRemoteRecip recip
|
UniqueCollabDelegRemoteRecip recip
|
||||||
UniqueCollabDelegRemoteGrant grant
|
UniqueCollabDelegRemoteGrant grant
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
-- Collaborators, from person perspective
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Permit
|
||||||
|
person PersonId
|
||||||
|
role Role
|
||||||
|
|
||||||
|
-------------------------------- Permit topic --------------------------------
|
||||||
|
|
||||||
|
PermitTopicLocal
|
||||||
|
permit PermitId
|
||||||
|
|
||||||
|
UniquePermitTopicLocal permit
|
||||||
|
|
||||||
|
PermitTopicRepo
|
||||||
|
permit PermitTopicLocalId
|
||||||
|
repo RepoId
|
||||||
|
|
||||||
|
UniquePermitTopicRepo permit
|
||||||
|
|
||||||
|
PermitTopicDeck
|
||||||
|
permit PermitTopicLocalId
|
||||||
|
deck DeckId
|
||||||
|
|
||||||
|
UniquePermitTopicDeck permit
|
||||||
|
|
||||||
|
PermitTopicLoom
|
||||||
|
permit PermitTopicLocalId
|
||||||
|
loom LoomId
|
||||||
|
|
||||||
|
UniquePermitTopicLoom permit
|
||||||
|
|
||||||
|
PermitTopicProject
|
||||||
|
permit PermitTopicLocalId
|
||||||
|
project ProjectId
|
||||||
|
|
||||||
|
UniquePermitTopicProject permit
|
||||||
|
|
||||||
|
PermitTopicGroup
|
||||||
|
permit PermitTopicLocalId
|
||||||
|
group GroupId
|
||||||
|
|
||||||
|
UniquePermitTopicGroup permit
|
||||||
|
|
||||||
|
PermitTopicRemote
|
||||||
|
permit PermitId
|
||||||
|
actor RemoteActorId
|
||||||
|
|
||||||
|
UniquePermitTopicRemote permit
|
||||||
|
|
||||||
|
------------------------------- Permit reason --------------------------------
|
||||||
|
|
||||||
|
PermitFulfillsTopicCreation
|
||||||
|
permit PermitId
|
||||||
|
|
||||||
|
UniquePermitFulfillsTopicCreation permit
|
||||||
|
|
||||||
|
PermitFulfillsInvite
|
||||||
|
permit PermitId
|
||||||
|
|
||||||
|
UniquePermitFulfillsInvite permit
|
||||||
|
|
||||||
|
PermitFulfillsJoin
|
||||||
|
permit PermitId
|
||||||
|
|
||||||
|
UniquePermitFulfillsJoin permit
|
||||||
|
|
||||||
|
-- Person's gesture
|
||||||
|
--
|
||||||
|
-- Join: Witnesses the initial Join that started the sequence
|
||||||
|
-- Invite: Witnesses their approval, seeing the topic's accept, and then
|
||||||
|
-- sending their own accept
|
||||||
|
-- Create: Records the Create activity that created the topic
|
||||||
|
|
||||||
|
PermitPersonGesture
|
||||||
|
permit PermitId
|
||||||
|
activity OutboxItemId
|
||||||
|
|
||||||
|
UniquePermitPersonGesture permit
|
||||||
|
UniquePermitPersonGestureActivity activity
|
||||||
|
|
||||||
|
-- Topic collaborator's gesture
|
||||||
|
--
|
||||||
|
-- Join: N/A (it happens but we don't record it)
|
||||||
|
-- Invite: Witnesses the initial Invite that started the sequence
|
||||||
|
|
||||||
|
PermitTopicGestureLocal
|
||||||
|
fulfills PermitFulfillsInviteId
|
||||||
|
invite OutboxItemId
|
||||||
|
|
||||||
|
UniquePermitTopicGestureLocal fulfills
|
||||||
|
UniquePermitTopicGestureLocalInvite invite
|
||||||
|
|
||||||
|
PermitTopicGestureRemote
|
||||||
|
fulfills PermitFulfillsInviteId
|
||||||
|
actor RemoteActorId
|
||||||
|
invite RemoteActivityId
|
||||||
|
|
||||||
|
UniquePermitTopicGestureRemote fulfills
|
||||||
|
UniquePermitTopicGestureRemoteInvite invite
|
||||||
|
|
||||||
|
-- Topic's accept
|
||||||
|
--
|
||||||
|
-- Join: N/A
|
||||||
|
-- Invite: Witnesses that the topic saw and approved the Invite
|
||||||
|
|
||||||
|
PermitTopicAcceptLocal
|
||||||
|
fulfills PermitFulfillsInviteId
|
||||||
|
topic PermitTopicLocalId
|
||||||
|
accept OutboxItemId
|
||||||
|
|
||||||
|
UniquePermitTopicAcceptLocal fulfills
|
||||||
|
UniquePermitTopicAcceptLocalTopic topic
|
||||||
|
UniquePermitTopicAcceptLocalAccept accept
|
||||||
|
|
||||||
|
PermitTopicAcceptRemote
|
||||||
|
fulfills PermitFulfillsInviteId
|
||||||
|
topic PermitTopicRemoteId
|
||||||
|
accept RemoteActivityId
|
||||||
|
|
||||||
|
UniquePermitTopicAcceptRemote fulfills
|
||||||
|
UniquePermitTopicAcceptRemoteTopic topic
|
||||||
|
UniquePermitTopicAcceptRemoteAccept accept
|
||||||
|
|
||||||
|
-------------------------------- Permit enable -------------------------------
|
||||||
|
|
||||||
|
-- Topic's grant
|
||||||
|
--
|
||||||
|
-- Join: Seeing the new-collaborator's Join and existing-collaborator's Accept,
|
||||||
|
-- the topic has made the link official and sent a direct-grant
|
||||||
|
-- Invite: Seeing existing-collaborator's Invite and new-collaborator's Accept,
|
||||||
|
-- the topic has made the link official and sent a direct-grant
|
||||||
|
-- Create: Upon being created, topic has sent its creator an admin-Grant
|
||||||
|
|
||||||
|
PermitTopicEnableLocal
|
||||||
|
permit PermitPersonGestureId
|
||||||
|
topic PermitTopicLocalId
|
||||||
|
grant OutboxItemId
|
||||||
|
|
||||||
|
UniquePermitTopicEnableLocal permit
|
||||||
|
UniquePermitTopicEnableLocalTopic topic
|
||||||
|
UniquePermitTopicEnableLocalGrant grant
|
||||||
|
|
||||||
|
PermitTopicEnableRemote
|
||||||
|
permit PermitPersonGestureId
|
||||||
|
topic PermitTopicRemoteId
|
||||||
|
grant RemoteActivityId
|
||||||
|
|
||||||
|
UniquePermitTopicEnableRemote permit
|
||||||
|
UniquePermitTopicEnableRemoteTopic topic
|
||||||
|
UniquePermitTopicEnableRemoteGrant grant
|
||||||
|
|
||||||
|
----------------------- Permit delegator+extension ---------------------------
|
||||||
|
|
||||||
|
-- This section is only for Project or Team topics
|
||||||
|
-- Person sends delegator-Grant, topic starts sending extension-Grants
|
||||||
|
|
||||||
|
-- Witnesses that the person used the direct-Grant to send a delegator-Grant to
|
||||||
|
-- the topic
|
||||||
|
PermitPersonSendDelegator
|
||||||
|
permit PermitPersonGestureId
|
||||||
|
grant OutboxItemId
|
||||||
|
|
||||||
|
UniquePermitPersonSendDelegator permit
|
||||||
|
UniquePermitPersonSendDelegatorGrant grant
|
||||||
|
|
||||||
|
-- Witnesses extension-Grants that the topic has sent, extending chains from
|
||||||
|
-- its components/subprojects or projects/superteams
|
||||||
|
|
||||||
|
PermitTopicExtendLocal
|
||||||
|
permit PermitPersonSendDelegatorId
|
||||||
|
topic PermitTopicEnableLocalId
|
||||||
|
grant OutboxItemId
|
||||||
|
|
||||||
|
UniquePermitTopicExtendLocal permit
|
||||||
|
UniquePermitTopicExtendLocalTopic topic
|
||||||
|
UniquePermitTopicExtendLocalGrant grant
|
||||||
|
|
||||||
|
PermitTopicExtendRemote
|
||||||
|
permit PermitPersonSendDelegatorId
|
||||||
|
topic PermitTopicEnableRemoteId
|
||||||
|
grant RemoteActivityId
|
||||||
|
|
||||||
|
UniquePermitTopicExtendRemote permit
|
||||||
|
UniquePermitTopicExtendRemoteTopic topic
|
||||||
|
UniquePermitTopicExtendRemoteGrant grant
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
-- Components, from project perspective
|
-- Components, from project perspective
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
Loading…
Reference in a new issue