organisational.py 1.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. from tracim.models import User
  2. from tracim.models.data import UserRoleInWorkspace
  3. CALENDAR_PERMISSION_READ = 'r'
  4. CALENDAR_PERMISSION_WRITE = 'w'
  5. class Calendar(object):
  6. def __init__(self, related_object, path):
  7. self._related_object = related_object
  8. self._path = path
  9. @property
  10. def related_object(self):
  11. return self._related_object
  12. def user_can_read(self, user: User) -> bool:
  13. raise NotImplementedError()
  14. def user_can_write(self, user: User) -> bool:
  15. raise NotImplementedError()
  16. class UserCalendar(Calendar):
  17. def user_can_write(self, user: User) -> bool:
  18. return self._related_object.user_id == user.user_id
  19. def user_can_read(self, user: User) -> bool:
  20. return self._related_object.user_id == user.user_id
  21. class WorkspaceCalendar(Calendar):
  22. _workspace_rights = {
  23. UserRoleInWorkspace.NOT_APPLICABLE:
  24. [],
  25. UserRoleInWorkspace.READER:
  26. [CALENDAR_PERMISSION_READ],
  27. UserRoleInWorkspace.CONTRIBUTOR:
  28. [CALENDAR_PERMISSION_READ, CALENDAR_PERMISSION_WRITE],
  29. UserRoleInWorkspace.CONTENT_MANAGER:
  30. [CALENDAR_PERMISSION_READ, CALENDAR_PERMISSION_WRITE],
  31. UserRoleInWorkspace.WORKSPACE_MANAGER:
  32. [CALENDAR_PERMISSION_READ, CALENDAR_PERMISSION_WRITE],
  33. }
  34. def user_can_write(self, user: User) -> bool:
  35. role = user.get_role(self._related_object)
  36. return CALENDAR_PERMISSION_WRITE in self._workspace_rights[role]
  37. def user_can_read(self, user: User) -> bool:
  38. role = user.get_role(self._related_object)
  39. return CALENDAR_PERMISSION_READ in self._workspace_rights[role]