From d891c11244b27c632c110aaf607cdf886d0c5f8d Mon Sep 17 00:00:00 2001
From: Oliver Facklam <oliver.facklam@polytechnique.edu>
Date: Mon, 4 Feb 2019 22:57:59 +0100
Subject: [PATCH] Proposition rights management

#32 , #30
---
 src/graphql/typeDefs/actions.graphql | 40 +++++++++++++++++++---------
 1 file changed, 27 insertions(+), 13 deletions(-)

diff --git a/src/graphql/typeDefs/actions.graphql b/src/graphql/typeDefs/actions.graphql
index 298aad0..ae714e9 100644
--- a/src/graphql/typeDefs/actions.graphql
+++ b/src/graphql/typeDefs/actions.graphql
@@ -65,25 +65,39 @@ type Mutation {
 
     Un des rôles du *graphe organique des groupes* est de définir le niveau de droit des users pour chaque groupe.
         D'abord, petit détail de terminologie : les cinq niveaux de droits sont inclus les uns dans les autres (un speaker est aussi un viewer, par ex.) (sauf pour les permissions héritées)
-    - Un user est viewer du groupe G :
-        - s'il est admin, speaker ou member d'un des descendants de G dans le LDAP.
-        - s'il est membre d'un groupe immédiatement parent de G (one-edge-down visibility), ou
-        - s'il est membre d'un groupe faisant partie du champ "visibilityEdge" de G
+        Plus précisément, on a les inclusions suivantes : admin strict > speaker > membre strict > membre hérité > viewer > authenticated.
+        Il n'y a que admin hérité qui n'est pas nécessairement inclus dans les autres niveaux de droits.
+
+    Détaillons ici les conditions exactes pour avoir un niveau de droit donné.
+    == Pour les groupes simples ==
+    - Member :
+        - Un user est membre strict du groupe G s'il est member, speaker ou admin de G selon la BDD sous-jacente.
+        - Un user est membre hérité du groupe G s'il est membre strict d'un de ses descendants.
+    - Speaker : un user est speaker du groupe G s'il est speaker ou admin de G selon la BDD. Pas de notion d'héritage de speaker.
+    - Admin : 
+        - Un user est admin strict du groupe G s'il est admin de G selon la BDD.
+        - Un user est admin hérité du groupe G s'il est admin strict d'un de ses ascendants.
+    - Viewer : un user est viewer du groupe G
+        - s'il est membre hérité de G.
+        - s'il est membre hérité d'un groupe immédiatement parent de G (one-edge-down visibility), ou
+        - s'il est membre hérité d'un groupe faisant partie du champ "visibilityEdge" de G
         - s'il est membre d'un métagroupe dont G est membre (implicit visibility-edges).
-    - Un user est membre d'un groupe G s'il est membre, speaker ou admin d'un des descendants de G dans le LDAP.
-    - Un user est speaker d'un groupe G s'il est speaker ou admin selon le LDAP.
-    - Un user est admin d'un groupe G s'il est admin d'un des ascendants de G dans le LDAP.
     - Dans tous les autres cas, le user a le niveau de droits "none" ou "authenticated", selon le cas de figure.
 
+    == Pour les méta-groupes ==
+    - Un user est membre d'un méta-groupe G s'il est membre (hérité) d'un groupe simple dans G.
+    - Un user est speaker d'un méta-groupe G s'il est admin strict d'un groupe simple dans G.
+    - Un user est admin d'un méta-groupe G s'il est admin (hérité) d'un groupe simple dans G.
+    - Un user est viewer d'un méta-groupe G s'il est viewer d'un groupe simple dans G.
+    
+
     L'autre rôle du *graphe organique des groupes* est de permettre l'administration "en cascade" des groupes enfants.
-    Si un groupe est le parent d'un autre, alors les admins du groupe parent peuvent se déclarer admins du groupe enfant. Exemples :
-        - BR est parent de Chocapix. L'admin de Chocapix est parti en vacances. L'admin de BR peut se déclarer admin de Chocapix et faire ce qu'il a à faire, sans attendre le retour du respo Chocapix.
-        - Cotisants-Kès est parent de Troll'X. Troll'X fait n'importe quoi (en floodant de Messages par ex). Les admins de Cotisants-Kès (les kessiers) peuvent se déclarer admin de Troll'X et stopper les dégâts.
+    Si un groupe est le parent d'un autre, alors les admins du groupe parent sont admins (hérités) du groupe enfant. Exemples :
+        - BR est parent de Chocapix. L'admin de Chocapix est parti en vacances. L'admin de BR peut, en tant qu'admin (hérité) de Chocapix, faire ce qu'il a à faire, sans attendre le retour du respo Chocapix.
+        - Cotisants-Kès est parent de Troll'X. Troll'X fait n'importe quoi (en floodant de Messages par ex). Les admins de Cotisants-Kès (les kessiers) peuvent, comme ils sont admins hérités de Troll'X, stopper les dégâts.
     
     Remarque sur speaker :
-    Il s'agit d'un nouveau niveau de droit par rapport à Frankiz 3.0 ; il n'est pas implémenté dans le LDAP frankiz.
-    Par conséquent, il est probable que, au début du moins, on impose que speaker=admin, pour pouvoir continuer à utiliser ce LDAP.
-    Le mieux serait néanmoins de rajouter cette propriété au LDAP.
+    Il s'agit d'un nouveau niveau de droit par rapport à Frankiz 3.0 ; qui est a présent implémenté sur le LDAP bloaziadur.
 
     Les mutations ci-dessous sont divisées en quatre, selon le niveau de droit requis pour pouvoir les appeler.
     Les Mutations concernant les *Requests* suivent à peu près toutes le schéma suivant :
-- 
GitLab