diff --git a/src/graphql/object_resolvers/requests.ts b/src/graphql/object_resolvers/requests.ts index 7c1a2c510fa6ca31501d28731781a3eaaa130e3a..98cec7f370dfca66f89268782eeff681bc029546 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 9f3a0a55f2d20874c69b86b600900b465c6483a5..2322608aec6bb2697f085d4cf220249da3c56272 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