middleware.py 1012 B

123456789101112131415161718192021
  1. from django.core.cache import cache, InvalidCacheBackendError
  2. from misago.acl.builder import build_acl
  3. class ACLMiddleware(object):
  4. def process_request(self, request):
  5. acl_key = request.user.make_acl_key()
  6. try:
  7. user_acl = cache.get(acl_key)
  8. if user_acl.version != request.monitor['acl_version']:
  9. raise InvalidCacheBackendError()
  10. except (AttributeError, InvalidCacheBackendError):
  11. user_acl = build_acl(request, request.user.get_roles())
  12. cache.set(acl_key, user_acl, 2592000)
  13. request.acl = user_acl
  14. if request.user.is_authenticated() and (request.acl.team or request.user.is_god()) != request.user.is_team:
  15. request.user.is_team = (request.acl.team or request.user.is_god())
  16. request.user.save(force_update=True)
  17. if request.session.team != request.user.is_team:
  18. request.session.team = request.user.is_team
  19. request.session.save()