AuthorizationManager.coffee 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. module.exports = AuthorizationManager =
  2. assertClientCanViewProject: (client, callback = (error) ->) ->
  3. AuthorizationManager._assertClientHasPrivilegeLevel client, ["readOnly", "readAndWrite", "owner"], callback
  4. assertClientCanEditProject: (client, callback = (error) ->) ->
  5. AuthorizationManager._assertClientHasPrivilegeLevel client, ["readAndWrite", "owner"], callback
  6. _assertClientHasPrivilegeLevel: (client, allowedLevels, callback = (error) ->) ->
  7. client.get "privilege_level", (error, privilegeLevel) ->
  8. return callback(error) if error?
  9. allowed = (privilegeLevel in allowedLevels)
  10. if allowed
  11. callback null
  12. else
  13. callback new Error("not authorized")
  14. assertClientCanViewProjectAndDoc: (client, doc_id, callback = (error) ->) ->
  15. AuthorizationManager.assertClientCanViewProject client, (error) ->
  16. return callback(error) if error?
  17. AuthorizationManager._assertClientCanAccessDoc client, doc_id, callback
  18. assertClientCanEditProjectAndDoc: (client, doc_id, callback = (error) ->) ->
  19. AuthorizationManager.assertClientCanEditProject client, (error) ->
  20. return callback(error) if error?
  21. AuthorizationManager._assertClientCanAccessDoc client, doc_id, callback
  22. _assertClientCanAccessDoc: (client, doc_id, callback = (error) ->) ->
  23. client.get "doc:#{doc_id}", (error, status) ->
  24. return callback(error) if error?
  25. if status? and status is "allowed"
  26. callback null
  27. else
  28. callback new Error("not authorized")
  29. addAccessToDoc: (client, doc_id, callback = (error) ->) ->
  30. client.set("doc:#{doc_id}", "allowed", callback)
  31. removeAccessToDoc: (client, doc_id, callback = (error) ->) ->
  32. client.del("doc:#{doc_id}", callback)