branch bow-v2-go updated (bb93ff3 -> 2b7707a)
This is an automated email from the git hooks/post-receive script. New change to branch bow-v2-go in repository bow. See https://gitlab.nuiton.org/chorem/bow.git from bb93ff3 correction nom du service screenshot new 2b7707a ajout des groupes et des invitations (todo: probleme de droit) The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 2b7707ae6dc009451d826868f2ec28eb001b9002 Author: Benjamin <poussin@codelutin.com> Date: Sat Feb 13 01:01:49 2021 +0100 ajout des groupes et des invitations (todo: probleme de droit) Summary of changes: doc/implementation.md | 115 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 112 insertions(+), 3 deletions(-) -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch bow-v2-go in repository bow. See https://gitlab.nuiton.org/chorem/bow.git commit 2b7707ae6dc009451d826868f2ec28eb001b9002 Author: Benjamin <poussin@codelutin.com> Date: Sat Feb 13 01:01:49 2021 +0100 ajout des groupes et des invitations (todo: probleme de droit) --- doc/implementation.md | 115 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 112 insertions(+), 3 deletions(-) diff --git a/doc/implementation.md b/doc/implementation.md index 0f7a4a3..a825d29 100644 --- a/doc/implementation.md +++ b/doc/implementation.md @@ -43,12 +43,14 @@ lecture dans ce groupe. Lorsqu'on recherche tous les tags `@toto` en tant qu'utilisateur, on a forcément ses propres bookmarks qui ont le tag `@toto`, mais aussi tout ceux des groupes auquels ont appartient et auquel le owner du bookmark appartient -aussi en tant que writer ou admin (mais pas reader). +aussi en tant que `adder`, `Writer` ou `admin` (mais pas `reader`). Un groupe a des admins qui peuvent ajouter (retirer?) d'autres utilisateurs dans le groupe. Par défaut le créateur est admin, mais il peut en ajouter d'autres. -Le groupe a des writers qui ont le droit d'ajouter ce même tags dans leurs bookmarks -et des readers qui peuvent voir les bookmarks qui ont ce tag. +Le groupe a des `writer` qui ont le droit d'ajouter ce même tags dans leurs bookmarks, +mais aussi de modifier les bookmarks avec ce tag, les `adder` ne peuvent qu'ajouter ce +tag, mais pas modifier les autres bookmarks qui ont ce tag +et des `reader` peuvent voir les bookmarks qui ont ce tag. Des utilisateurs peuvent donc mettre le tag dans leurs bookmarks sans que personne ne les voit jusqu'au jour on il sont ajouter à un groupe qui porte @@ -60,3 +62,110 @@ groupe, ce qui permettra de diffuser une url avec ce token et ainsi permet à n'importe qui de voir ces bookmarks Un groupe est supprimé lorsqu'il n'y a plus d'utilisateur (admin, writer, reader) + +Le owner du bookmark, les admin et writer d'un groupe peuvent supprimer le `tag` +du groupe dans un bookmark, ce qui fait disparaitre ce bookmark du groupe. + +Lorsqu'on veut ajouter un utilisateur dans un groupe, l'ajout devra être validé +par l'utilisteur, sinon on pourrait lui "voler" des bookmarks en créant un groupe +avec un tag qu'il utilise et en l'ajoutant dans les `adder` +Pour ce faire une table `invitation` contient les invitations en cours. Une fois +validé, l'invitation est supprimée et on est ajouté au groupe dans la bonne +catégorie (`admin`, `writer`, `adder`, `reader`) + +| Droit | Invitation | Modification | Ajout | Lecture/recherche | +| :---- | :--------: | :----------: | :---: | :---------------: | +| Admin | X | X | X | X | +| Writer| | X | X | X | +| Adder | | | X | X | +| Reader| | | | X | + +- Invitation: permet de demander à quelque de venir dans le groupe +- Modification: permet de modifier les bookmarks qui ont se groupe comme tag +- Ajout: permet d'ajouter ce tag sur ces bookmarks pour les rendre visible pour ce groupe +- Lecture/recherche: permet de rechercher et lire les bookmarks qui ont ce groupe + +``` +CREATE TABLE invitation ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + creationDate TIMESTAMP WITH TIME ZONE DEFAULT current_timestamp, + validityDate TIMESTAMP WITH TIME ZONE DEFAULT current_timestamp, + initiator UUID NOT NULL, -- la personne qui a invité + guest UUID NOT NULL, -- la personne que est invité à rejoindre le groupe + group UUID NOT NULL FOREIGN KEY , -- le groupe pour lequel l'invitation est faite + role TEXT NOT NULL, -- le role qu'aura l'invité dans le groupe s'il accepte + message TEXT -- un message que l +); + +CREATE UNIQUE INDEX guest_group_unique ON invitation(guest,group); -- si on ajout une nouvelle, on remplace l'ancienne +CREATE INDEX invitation ON bowgroup (guest); +CREATE INDEX invitation ON bowgroup (group); + +ALTER TABLE bowgroup ADD adder UUID[]; +CREATE INDEX bowgroup_adder_idx ON bowgroup USING gin (adder); + +GRANT UPDATE(adder) ON bowgroup TO person; +-- tout le monde peut lire les groupes si on est dans les utilisateurs du groupes +ALTER POLICY bowgroup_access_select ON bowgroup + FOR SELECT + USING ((admin || writer || adder || reader ) @> ('{' || current_user || '}')::uuid[]); + +-- si un bookmark a comme tag '@toto' et proprietaire '1234' alors il est visible de toutes les utilisateurs +-- appartenant (admin, writer, reader) au groupe 'toto' dont l'utilisateur '1234' est admin ou writer +ALTER POLICY bookmark_access_group ON bookmark + FOR SELECT + TO person + USING ( current_user::uuid in (SELECT unnest(admin || writer || adder || reader) FROM bowgroup WHERE tags @> ('{@' || name || '}')::text[] + AND ('{' || owner || '}')::uuid[] <@ (admin || writer || adder))); + +GRANT SELECT, INSERT, DELETE ON invitation TO person; + +ALTER TABLE invitation ENABLE ROW LEVEL SECURITY; +-- les admin d'un groupe peuvent ajouter/retirer des entrées pour ce groupe +CREATE POLICY invitation_insert ON invitation + FOR INSERT + WITH CHECK (initiator = current_user::uuid) + ADD current_user::uuid in (SELECT unnest(admin) FROM bowgroup WHERE id = group);; + +CREATE POLICY invitation_select ON invitation + FOR SELECT, DELETE + USING current_user::uuid in (SELECT unnest(admin) FROM bowgroup WHERE id = group); + +-- les guests peuvent s'ajouter au groupe s'ils sont dans les invités puis se retirer des invitations +CREATE POLICY bowgroup_access_update ON bowgroup + FOR UPDATE + USING current_date < (SELECT validityDate FROM invitation i WHERE group = id AND guest = current_user::uuid) + WITH CHECK current_user::uuid in (SELECT guest FROM invitation i WHERE group = id ); + +CREATE POLICY invitation_select ON invitation + FOR SELECT, DELETE + USING (guest = current_user::uuid); + +``` + +Il faut qu'une personne puisse se retirer d'un group + +== Les tokens de groupes + +``` +CREATE TABLE bowgroupToken ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + bowgroup UUID REFERENCES bowgroup ON DELETE CASCADE, + creationDate TIMESTAMP WITH TIME ZONE DEFAULT current_timestamp, + updateDate TIMESTAMP WITH TIME ZONE DEFAULT current_timestamp, + + token TEXT NOT NULL UNIQUE, -- uuid + description TEXT NOT NULL, + expiration TIMESTAMP WITH TIME ZONE +); + +CREATE INDEX bowgroupToken_bowgroup_idx ON bowgroupToken (bowgroup); +CREATE INDEX bowgroupToken_token_idx ON bowgroupToken (token); +CREATE TRIGGER update_bowgroupToken_updateDate BEFORE UPDATE ON bowgroupToken FOR EACH ROW EXECUTE PROCEDURE update_updateDate_column(); + +GRANT SELECT, INSERT, DELETE, TRIGGER ON bowgroupToken TO person; +GRANT UPDATE(updateDate, expiration) ON bowgroupToken TO person; + +ALTER TABLE bowgroupToken ENABLE ROW LEVEL SECURITY; + +``` \ No newline at end of file -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
participants (1)
-
chorem.org scm