AuthorizationManager.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. const { NotAuthorizedError } = require('./Errors')
  2. let AuthorizationManager
  3. module.exports = AuthorizationManager = {
  4. assertClientCanViewProject(client, callback) {
  5. AuthorizationManager._assertClientHasPrivilegeLevel(
  6. client,
  7. ['readOnly', 'readAndWrite', 'review', 'owner'],
  8. callback
  9. )
  10. },
  11. assertClientCanEditProject(client, callback) {
  12. AuthorizationManager._assertClientHasPrivilegeLevel(
  13. client,
  14. ['readAndWrite', 'owner'],
  15. callback
  16. )
  17. },
  18. assertClientCanReviewProject(client, callback) {
  19. AuthorizationManager._assertClientHasPrivilegeLevel(
  20. client,
  21. ['readAndWrite', 'owner', 'review'],
  22. callback
  23. )
  24. },
  25. _assertClientHasPrivilegeLevel(client, allowedLevels, callback) {
  26. if (allowedLevels.includes(client.ol_context.privilege_level)) {
  27. callback(null)
  28. } else {
  29. callback(new NotAuthorizedError())
  30. }
  31. },
  32. assertClientCanViewProjectAndDoc(client, docId, callback) {
  33. AuthorizationManager.assertClientCanViewProject(client, function (error) {
  34. if (error) {
  35. return callback(error)
  36. }
  37. AuthorizationManager._assertClientCanAccessDoc(client, docId, callback)
  38. })
  39. },
  40. assertClientCanEditProjectAndDoc(client, docId, callback) {
  41. AuthorizationManager.assertClientCanEditProject(client, function (error) {
  42. if (error) {
  43. return callback(error)
  44. }
  45. AuthorizationManager._assertClientCanAccessDoc(client, docId, callback)
  46. })
  47. },
  48. assertClientCanReviewProjectAndDoc(client, docId, callback) {
  49. AuthorizationManager.assertClientCanReviewProject(client, function (error) {
  50. if (error) {
  51. return callback(error)
  52. }
  53. AuthorizationManager._assertClientCanAccessDoc(client, docId, callback)
  54. })
  55. },
  56. _assertClientCanAccessDoc(client, docId, callback) {
  57. if (client.ol_context[`doc:${docId}`] === 'allowed') {
  58. callback(null)
  59. } else {
  60. callback(new NotAuthorizedError())
  61. }
  62. },
  63. addAccessToDoc(client, docId, callback) {
  64. client.ol_context[`doc:${docId}`] = 'allowed'
  65. callback(null)
  66. },
  67. removeAccessToDoc(client, docId, callback) {
  68. delete client.ol_context[`doc:${docId}`]
  69. callback(null)
  70. },
  71. }