middleware.py 1.2 KB

1234567891011121314151617181920212223242526
  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. if request.user.is_authenticated():
  6. acl_key = request.user.make_acl_key()
  7. else:
  8. acl_key = request.session.get('acl_key')
  9. if not acl_key:
  10. acl_key = request.user.make_acl_key()
  11. request.session['acl_key'] = acl_key
  12. try:
  13. user_acl = cache.get(acl_key)
  14. if user_acl.version != request.monitor['acl_version']:
  15. raise InvalidCacheBackendError()
  16. except AttributeError, InvalidCacheBackendError:
  17. user_acl = build_acl(request, request.user.get_roles())
  18. cache.set(acl_key, user_acl, 2592000)
  19. request.acl = user_acl
  20. if request.user.is_authenticated() and (request.acl.team or request.user.is_god()) != request.user.is_team:
  21. request.user.is_team = (request.acl.team or request.user.is_god())
  22. request.user.save(force_update=True)
  23. request.session.team = request.user.is_team