From 8cd678aeca928005cd6872789f536365f6396a1d Mon Sep 17 00:00:00 2001 From: Guilhem Roy <guilhem.roy@polytechnique.edu> Date: Sun, 3 Mar 2019 18:49:44 +0100 Subject: [PATCH] =?UTF-8?q?Modification=20des=20resolvers=20des=20requ?= =?UTF-8?q?=C3=AAtes=20pour=20v=C3=A9rifier=20les=20autorisations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/graphql/object_resolvers/requests.ts | 10 +++++--- src/graphql/resolvers.ts | 31 +++++++++++++----------- 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/src/graphql/object_resolvers/requests.ts b/src/graphql/object_resolvers/requests.ts index 7c1a2c5..98cec7f 100644 --- a/src/graphql/object_resolvers/requests.ts +++ b/src/graphql/object_resolvers/requests.ts @@ -1,5 +1,5 @@ /** - * @file Resolvers pour tous les types de messages + * @file Resolvers pour tous les types de requetes * @author akka, ofacklam */ @@ -398,7 +398,7 @@ export class GroupCoauthorEvent extends Request { */ async from(args, context: Context, info): Promise<Group> { await this.fetchData(); - throw "Not implemented"; + return new SimpleGroup(this.m_from); } /** @@ -411,7 +411,7 @@ export class GroupCoauthorEvent extends Request { */ async to(args, context: Context, info): Promise<Group> { await this.fetchData(); - throw "Not implemented"; + return new SimpleGroup(this.m_to); } /** @@ -426,6 +426,10 @@ export class GroupCoauthorEvent extends Request { await this.fetchData(); throw "Not implemented"; //a-t-il le droit de voir ??? + // On suppose que s'il a accès à la requête, c'est que : + // - Soit il est dans le groupe organisateur : RAS + // - Soit il l'a postée, et donc avait le droit de voir l'event : RAS + // - Soit un autre admin du groupe émetteur a posté la requête, mais tous les admins n'ont pas forcément le droit de voir l'event... return new Event(this.m_forEvent); } } \ No newline at end of file diff --git a/src/graphql/resolvers.ts b/src/graphql/resolvers.ts index 9f3a0a5..2322608 100644 --- a/src/graphql/resolvers.ts +++ b/src/graphql/resolvers.ts @@ -108,26 +108,29 @@ export const resolvers = { // @rights admin du groupe destinaire ou le user émetteur userJoinGroupRequest: async function (root, args, context: Context): Promise<UserJoinGroup> { - //TODO : verifier les autorisations - throw "Not implemented"; - return context.models.request.getUserJoinGroupRequest(args.rid); - throw new AuthenticationError("Not connected or on-platal"); + let r = await context.models.request.getUserJoinGroupRequest(args.rid); + if(context.models.auth.isAdmin((await r.to(args, context, "")).gid) || context.models.auth.getUid() == (await r.from(args, context, "")).uid) { + return r; + } + throw new AuthenticationError("Not an admin"); }, // @rights admin du groupe émetteur ou destinataire groupJoinMetagroupRequest: async function (root, args, context: Context): Promise<GroupJoinMetagroup> { - //TODO : verifier les autorisations - throw "Not implemented"; - return context.models.request.getGroupJoinMetagroupRequest(args.rid); - throw new AuthenticationError("Not connected or on-platal"); + let r = await context.models.request.getGroupJoinMetagroupRequest(args.rid); + if(context.models.auth.isAdmin((await r.to(args, context, "")).gid) || context.models.auth.isAdmin((await r.from(args, context, "")).gid)) { + return r; + } + throw new AuthenticationError("Not an admin"); }, // @rights admin du groupe émetteur ou destinataire groupCoauthorEventRequest: async function (root, args, context: Context): Promise<GroupCoauthorEvent> { - //TODO : verifier les autorisations - throw "Not implemented"; - return context.models.request.getGroupCoauthorEventRequest(args.rid); - throw new AuthenticationError("Not connected or on-platal"); + let r = await context.models.request.getGroupCoauthorEventRequest(args.rid); + if(context.models.auth.isAdmin((await r.to(args, context, "")).gid) || context.models.auth.isAdmin((await r.from(args, context, "")).gid)) { + return r; + } + throw new AuthenticationError("Not an admin"); }, // Tous les Messages visibles par un utilisateur(dont le uid, et donc les autorisations, est passé par context) @@ -360,7 +363,7 @@ export const resolvers = { throw new AuthenticationError("Not a speaker"); }, - // @rights speaker du groupe émetteur + // @rights speaker d'un groupe auteur editEvent: async function (root, args, context: Context): Promise<Event> { throw "Not implemented"; // TODO : Vérifier les autorisations. @@ -374,7 +377,7 @@ export const resolvers = { throw new AuthenticationError("Not a speaker"); }, - // @rights speaker du groupe émetteur + // @rights speaker d'un groupe auteur removeEvent: async function (root, args, context: Context): Promise<boolean> { throw "Not implemented"; // TODO : Vérifier les autorisations -- GitLab