AuthorizationManager.js 2.2 KB

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