Guest User

Untitled

a guest
Jun 23rd, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.79 KB | None | 0 0
  1. import formatErrors from './formatErrors';
  2. import linkedQuery from './linkedQueries';
  3.  
  4. const createResolver = (resolver) => {
  5. const baseResolver = resolver;
  6.  
  7. baseResolver.createResolver = (options, childResolver) => {
  8. const newResolver = async (parent, args, context, info) => {
  9. if (childResolver == null) {
  10. childResolver = options;
  11. options = {};
  12. }
  13.  
  14. if (options.catchErrors) {
  15. try {
  16. await resolver(parent, args, context, info);
  17. return childResolver(parent, args, context, info);
  18. } catch (err) {
  19. console.log('[PERMISSIONS ERROR]', err);
  20. return {
  21. ok: false,
  22. errors: formatErrors(err, context.models),
  23. };
  24. }
  25. } else {
  26. await resolver(parent, args, context, info);
  27. return childResolver(parent, args, context, info);
  28. }
  29. };
  30.  
  31. return createResolver(newResolver, false);
  32. };
  33.  
  34. return baseResolver;
  35. };
  36.  
  37. export const requiresAuth = createResolver((parent, args, { me }) => {
  38. if (!me || !me.id) {
  39. throw new Error('Not logged in');
  40. }
  41. });
  42.  
  43. export const requiresPermission = permissionName =>
  44. requiresAuth.createResolver(async (parent, args, { models, me }) => {
  45. const mePermissions = await linkedQuery({
  46. keyModel: models.User,
  47. keyWhere: { id: me.id },
  48. midModel: models.Role,
  49. returnModel: models.Permission,
  50. });
  51.  
  52. const hasPermission = mePermissions.some(({ name }) => name === permissionName);
  53.  
  54. if (!hasPermission) throw new Error(`This action requires the ${permissionName} permission`);
  55. });
Add Comment
Please, Sign In to add comment