diff --git a/src/graphql/connectors/authentifiers.js b/src/graphql/connectors/authentifiers.js index 79f950f17e3e13f09936f8bd4540138f718773dd..47fc848e76622bd4a1f5f8635bd10d91c7676496 100644 --- a/src/graphql/connectors/authentifiers.js +++ b/src/graphql/connectors/authentifiers.js @@ -21,17 +21,19 @@ function User(user, ldap_access){ /** * @summary Authentifie un utilisateur anonyme * @arg {Object} user - Représente l'utilisateur qui a effectué la requête. - * @return {Promise(Boolean)} L'utilisateur possède-t-il les droits indiqués ici ? + * @return {Promise(Object)} Un objet user si l'utilisateur possède les droits indiqués, + * null sinon * @rights user */ -export function anonymous(user){ +export async function anonymous(user){ return new User(user, new UtilisateurAnonyme()); } /** * @summary Authentifie un utilisateur comme viewer(groupUID) - * @arg {Object} user - Représente l'utilisateur qui a effectué la requête. - * @return {Promise(Boolean)} L'utilisateur possède-t-il les droits indiqués ici ? + * @arg {Object} user - Représente l'utilisateur qui a effectué la requête. + * * @return {Promise(Object)} Un objet user si l'utilisateur possède les droits indiqués, + * null sinon * @rights user */ export function loggedIn(user, groupUID){ @@ -41,7 +43,8 @@ export function loggedIn(user, groupUID){ /** * @summary Authentifie un utilisateur comme viewer(groupUID) * @arg {Object} user - Représente l'utilisateur qui a effectué la requête. - * @return {Promise(Boolean)} L'utilisateur possède-t-il les droits indiqués ici ? + * * @return {Promise(Object)} Un objet user si l'utilisateur possède les droits indiqués, + * null sinon * @rights user */ export function viewer(user, groupUID){ @@ -51,7 +54,8 @@ export function viewer(user, groupUID){ /** * @summary Authentifie un utilisateur anonyme * @arg {Object} user - Représente l'utilisateur qui a effectué la requête. - * @return {Promise(Boolean)} L'utilisateur possède-t-il les droits indiqués ici ? + * * @return {Promise(Object)} Un objet user si l'utilisateur possède les droits indiqués, + * null sinon * @rights user */ export async function member(user, groupUID){ @@ -65,7 +69,8 @@ export async function member(user, groupUID){ /** * @summary Authentifie un utilisateur comme viewer(groupUID) * @arg {Object} user - Représente l'utilisateur qui a effectué la requête. - * @return {Promise(Boolean)} L'utilisateur possède-t-il les droits indiqués ici ? + * * @return {Promise(Object)} Un objet user si l'utilisateur possède les droits indiqués, + * null sinon * @rights user */ export async function speaker(user, groupUID){ @@ -75,18 +80,21 @@ export async function speaker(user, groupUID){ /** * @summary Authentifie un utilisateur anonyme * @arg {Object} user - Représente l'utilisateur qui a effectué la requête. - * @return {Promise(Boolean)} L'utilisateur possède-t-il les droits indiqués ici ? + * * @return {Promise(Object)} Un objet user si l'utilisateur possède les droits indiqués, + * null sinon * @rights user */ export async function admin(user, groupUID){ let adminList = await list_selectors.usersWithAdminRights(user, groupUID); - return (typeof adminList != "undefined" && adminList.indexOf(user.uid) != -1); + if (typeof adminList != "undefined" && adminList.indexOf(user.uid) != -1) + return new User(user, AdministrateurConnecte()); } /** * @summary Authentifie un utilisateur comme viewer(groupUID) * @arg {Object} user - Représente l'utilisateur qui a effectué la requête. - * @return {Promise(uid)} L'utilisateur possède-t-il les droits de superviseur ? Si oui, renvoie la justification. Sinon, renvoie false. + * @return {Promise(uid)} L'utilisateur possède-t-il les droits de superviseur ? + * Si oui, renvoie la justification. Sinon, renvoie false. * Attention : renvoie true si l'utilisateur a les droits mais sans justification. * @rights user */ diff --git a/src/graphql/connectors/connectors.js b/src/graphql/connectors/connectors.js index 90fbd8f5ce9a923b5f4d5e5e3828f51e449b52dd..baea0965d5989ba95bae69293ffe18ac2fa11e9e 100644 --- a/src/graphql/connectors/connectors.js +++ b/src/graphql/connectors/connectors.js @@ -13,6 +13,10 @@ import ldap_bind_user from '../../../ldap_connexion_config.json'; const utilisateur = new ldap.UtilisateurAnonyme(); export { utilisateur }; +/* Ce n'est pas comme ça qu'on est censé fonctionner. Toute utilisation de utilisateur + a vocation à être temporaire, et sera remplacé par l'usage des fonctions + d'authentification correctes +*/ /* Le tag @rights est la gestion des autorisations. @@ -345,7 +349,7 @@ export async function getAnnouncement(user, messageID){ return res[0]; } res = await knex.select().from('events').where('id', messageID) - .whereIn('id', await selectors.visibleEvents(user)); + .whereIn('id', await selectors.visibleEvents(user)); if(res[0]){ res[0].type = 'Announcement'; return res[0]; @@ -355,7 +359,7 @@ export async function getAnnouncement(user, messageID){ export async function getEvent(user, messageID){ let res = await knex.select().from('events').where('id', messageID) - .whereIn('id', await selectors.visibleEvents(user)); + .whereIn('id', await selectors.visibleEvents(user)); if(res[0]){ res[0].type = 'Event'; return res[0]; @@ -365,7 +369,7 @@ export async function getEvent(user, messageID){ export async function getPrivatePost(user, messageID){ let res = await knex.select().from('private_posts').where('id', messageID) - .whereIn('id', await selectors.visiblePrivatePosts(user)); + .whereIn('id', await selectors.visiblePrivatePosts(user)); if(res[0]){ res[0].type = 'PrivatePost'; return res[0]; @@ -462,29 +466,29 @@ export async function visibleMessages(user, messageID){ export async function getMessageAuthor(user, messageID){ let GroupAuthors = await getGroupsFromCallbacks(user, qb => { return qb.select({uid: 'group'}).from('group_message_relationships') - .where('message', messageID).whereIn('status', ['host', 'publish']) - }) - let authorObject = Object() + .where('message', messageID).whereIn('status', ['host', 'publish']); + }); + let authorObject = Object(); if(GroupAuthors.length == 1) - authorObject.singleGroup = GroupAuthors[0] + authorObject.singleGroup = GroupAuthors[0]; else - authorObject.multipleGroups = GroupAuthors + authorObject.multipleGroups = GroupAuthors; - return authorObject + return authorObject; } export async function getMessageRecipient(user, messageID){ let GroupReciepients = await getGroupsFromCallbacks(user, qb => { return qb.select({uid: 'group'}).from('group_message_relationships') - .where('message', messageID).where('status', 'recieve') - }) - let recipientObject = Object() + .where('message', messageID).where('status', 'recieve'); + }); + let recipientObject = Object(); if(GroupReciepients.length == 1) - recipientObject.singleGroup = GroupReciepients[0] + recipientObject.singleGroup = GroupReciepients[0]; else - authorObject.multipleGroups = GroupReciepients + recipientObject.multipleGroups = GroupReciepients; - return recipientObject + return recipientObject; } /** diff --git a/src/graphql/resolvers.js b/src/graphql/resolvers.js index d61fa74664e94514ba6532f18da04d3bd3056ae4..b336be3e6418df8bd3d255bbc60dbafb7f769682 100644 --- a/src/graphql/resolvers.js +++ b/src/graphql/resolvers.js @@ -324,7 +324,17 @@ export const resolvers = { // @rights viewer(obj.uid) SimpleGroup: { - members: (obj, args, context) => { + admins: async function(obj, args, context){ + let user = await authentifiers.member(context.user, obj.uid); + return user.ldap_access.listMembers(context.user,obj.uid); + }, + + members: async function(obj, args, context){ + let user = await authentifiers.member(context.user, obj.uid); + return user.ldap_access.listMembers(context.user,obj.uid); + }, + + likers: async function(obj, args, context){ return connectors.utilisateur.listMembers(context.user,obj.uid); } }, diff --git a/src/graphql/typeDefs/objects.js b/src/graphql/typeDefs/objects.js index 02166d2f6958441ae4d683cc6e06042d73b0e36b..673466e1ed8c17706cbe642df96cefbdaa20e7f6 100644 --- a/src/graphql/typeDefs/objects.js +++ b/src/graphql/typeDefs/objects.js @@ -64,8 +64,11 @@ const Group = ` createdAt: String! updatedAt: String! - # Membres du groupe + # Admin, membres, sympathisants du groupe + admins: [User] members: [User] + likers: [User] + description: String # École d'origine du groupe school: String