Development of an internal social media platform with personalised dashboards for students
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

context_processors.py 1.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. # PermWrapper and PermLookupDict proxy the permissions system into objects that
  2. # the template system can understand.
  3. class PermLookupDict:
  4. def __init__(self, user, app_label):
  5. self.user, self.app_label = user, app_label
  6. def __repr__(self):
  7. return str(self.user.get_all_permissions())
  8. def __getitem__(self, perm_name):
  9. return self.user.has_perm("%s.%s" % (self.app_label, perm_name))
  10. def __iter__(self):
  11. # To fix 'item in perms.someapp' and __getitem__ interaction we need to
  12. # define __iter__. See #18979 for details.
  13. raise TypeError("PermLookupDict is not iterable.")
  14. def __bool__(self):
  15. return self.user.has_module_perms(self.app_label)
  16. class PermWrapper:
  17. def __init__(self, user):
  18. self.user = user
  19. def __getitem__(self, app_label):
  20. return PermLookupDict(self.user, app_label)
  21. def __iter__(self):
  22. # I am large, I contain multitudes.
  23. raise TypeError("PermWrapper is not iterable.")
  24. def __contains__(self, perm_name):
  25. """
  26. Lookup by "someapp" or "someapp.someperm" in perms.
  27. """
  28. if '.' not in perm_name:
  29. # The name refers to module.
  30. return bool(self[perm_name])
  31. app_label, perm_name = perm_name.split('.', 1)
  32. return self[app_label][perm_name]
  33. def auth(request):
  34. """
  35. Return context variables required by apps that use Django's authentication
  36. system.
  37. If there is no 'user' attribute in the request, use AnonymousUser (from
  38. django.contrib.auth).
  39. """
  40. if hasattr(request, 'user'):
  41. user = request.user
  42. else:
  43. from django.contrib.auth.models import AnonymousUser
  44. user = AnonymousUser()
  45. return {
  46. 'user': user,
  47. 'perms': PermWrapper(user),
  48. }