From dfc57950977ac4aa8c2cfcc17a409b84e59f9c9a Mon Sep 17 00:00:00 2001 From: Oliver Facklam <oliver.facklam.lfgeb@gmail.com> Date: Sun, 3 Feb 2019 00:44:03 +0100 Subject: [PATCH] Better objects.graphql --- package-lock.json | 47 ++++++++++------------------ src/graphql/typeDefs/actions.graphql | 3 +- src/graphql/typeDefs/objects.graphql | 11 ++++--- 3 files changed, 25 insertions(+), 36 deletions(-) diff --git a/package-lock.json b/package-lock.json index daa192c..e0370a5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3819,7 +3819,7 @@ }, "browserify-aes": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { @@ -4346,7 +4346,7 @@ "colors": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", - "integrity": "sha1-OeAF1Uav4B4B+cTKj6UPaGoBIF0=" + "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==" }, "command-line-args": { "version": "5.0.2", @@ -4652,7 +4652,7 @@ }, "create-hash": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { @@ -4665,7 +4665,7 @@ }, "create-hmac": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { @@ -4909,7 +4909,7 @@ }, "diffie-hellman": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { @@ -4993,7 +4993,7 @@ "dotenv": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", - "integrity": "sha1-lBwEEFNdlCyL7PKNPzV9vZ1HYGQ=" + "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==" }, "dtrace-provider": { "version": "0.8.6", @@ -6194,8 +6194,7 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "aproba": { "version": "1.2.0", @@ -6238,8 +6237,7 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", @@ -6250,8 +6248,7 @@ "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -6368,8 +6365,7 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -6381,7 +6377,6 @@ "version": "1.0.0", "bundled": true, "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -6411,7 +6406,6 @@ "version": "2.3.5", "bundled": true, "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -6430,7 +6424,6 @@ "version": "0.5.1", "bundled": true, "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -6524,7 +6517,6 @@ "version": "1.4.0", "bundled": true, "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -6610,8 +6602,7 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -6647,7 +6638,6 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -6667,7 +6657,6 @@ "version": "3.0.1", "bundled": true, "dev": true, - "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -6711,14 +6700,12 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true } } }, @@ -8245,7 +8232,7 @@ "ldapauth-fork": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ldapauth-fork/-/ldapauth-fork-4.1.0.tgz", - "integrity": "sha1-WdpiYC417bOuPYoU7LE+ipOJk9I=", + "integrity": "sha512-OFz3aJDqYGpgo96gVBKhaIFIO/mc9OFpn9IdINHo22eUmF0leU836HgksIQQ3Ga0Mz48xwEhSZ/rJlWOzaUXJQ==", "requires": { "@types/ldapjs": "^1.0.0", "@types/node": "^10.12.12", @@ -9458,7 +9445,7 @@ "passport-ldapauth": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/passport-ldapauth/-/passport-ldapauth-2.1.1.tgz", - "integrity": "sha1-S0R4zSg8gt6JYGmj5CfvjPopX+E=", + "integrity": "sha512-DiK9nwZthdCeZE+TRx2AzRk9mg8OeAz4+tZdXC8EPVAVmeW7YSWyK4XCJ8/B7ySWpEZtrN1OcrKtWjpLXFy0/A==", "requires": { "@types/node": "^10.12.12", "@types/passport": "^0.4.7", @@ -9662,7 +9649,7 @@ }, "pinkie-promise": { "version": "2.0.1", - "resolved": "http://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { @@ -10781,7 +10768,7 @@ }, "sha.js": { "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { diff --git a/src/graphql/typeDefs/actions.graphql b/src/graphql/typeDefs/actions.graphql index 35fc321..298aad0 100644 --- a/src/graphql/typeDefs/actions.graphql +++ b/src/graphql/typeDefs/actions.graphql @@ -65,7 +65,6 @@ 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) - - Les conditions pour qu'un user soit membre, speaker ou admin sont claires, puisque cette information est stockée directement en BDD. - 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 @@ -74,7 +73,7 @@ type Mutation { - 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". + - Dans tous les autres cas, le user a le niveau de droits "none" ou "authenticated", selon le cas de figure. 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 : diff --git a/src/graphql/typeDefs/objects.graphql b/src/graphql/typeDefs/objects.graphql index 513143f..c1cd25f 100644 --- a/src/graphql/typeDefs/objects.graphql +++ b/src/graphql/typeDefs/objects.graphql @@ -40,10 +40,13 @@ type User { address: String # Adresse de l'utilisateur (numero de casert par exemple) # Ses interactions avec des groupes - memberOf: [Group] # Groupes dont l'utilisateur est membre - speakerOf: [Group] - adminOf: [Group] + memberOf: [Group] # Groupes dont l'utilisateur est membre, speaker ou admin selon le LDAP + memberOfAll: [Group] # Groupes pour lesquels l'utilisateur est membre, speaker ou admin d'un des descendants + speakerOf: [Group] # Groupes dont l'utilisateur est speaker ou admin selon le LDAP + adminOf: [Group] # Groupes dont l'utilisateur est admin selon le LDAP + adminOfAll: [Group] # Groupes pour lesquels l'utilisateur est admin d'un des ascendants likes: [Group] # Groupes dont l'utilisateur est sympathisant (purement indicatif, pas d'influence sur les niveaux de droit) + dislikes: [Group] # Groupes que l'utilisateur veut cacher # Les Message dont il est l'auteur questionsFromUser: [Question] # Les seuls Messages publics où `authors` est de type User @@ -108,7 +111,7 @@ type SimpleGroup implements Group { mail: String website: String - # Admins, speakers (respos com), membres, sympathisants du groupe + # Admins, speakers (respos com), membres, sympathisants du groupe (propres au groupe, ie selon le LDAP) members: [User] speakers: [User] admins: [User] -- GitLab