AuthorizationHelper.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. const { UserSchema } = require('../../models/User')
  2. const SplitTestHandler = require('../SplitTests/SplitTestHandler')
  3. const ProjectGetter = require('../Project/ProjectGetter')
  4. const { callbackify } = require('@overleaf/promise-utils')
  5. module.exports = {
  6. hasAnyStaffAccess,
  7. isReviewerRoleEnabled: callbackify(isReviewerRoleEnabled),
  8. promises: {
  9. isReviewerRoleEnabled,
  10. },
  11. }
  12. function hasAnyStaffAccess(user) {
  13. if (!user.staffAccess) {
  14. return false
  15. }
  16. for (const key of Object.keys(UserSchema.obj.staffAccess)) {
  17. if (user.staffAccess[key]) return true
  18. }
  19. return false
  20. }
  21. async function isReviewerRoleEnabled(userId, projectId) {
  22. const project = await ProjectGetter.promises.getProject(projectId, {
  23. reviewer_refs: 1,
  24. owner_ref: 1,
  25. })
  26. // if there are reviewers, it means the role is enabled
  27. if (Object.keys(project.reviewer_refs || {}).length > 0) {
  28. return true
  29. }
  30. // if there are no reviewers, check split test from project owner
  31. if (project.owner_ref === userId) {
  32. const reviewerRoleAssigment =
  33. await SplitTestHandler.promises.getAssignmentForUser(
  34. userId,
  35. 'reviewer-role'
  36. )
  37. return reviewerRoleAssigment.variant === 'enabled'
  38. }
  39. return false
  40. }