useracl.py 952 B

123456789101112131415161718192021222324252627282930
  1. import copy
  2. from . import buildacl
  3. from .cache import get_acl_cache, set_acl_cache
  4. from .providers import providers
  5. def get_user_acl(user, cache_versions):
  6. user_acl = get_acl_cache(user, cache_versions)
  7. if user_acl is None:
  8. user_acl = buildacl.build_acl(user.get_roles())
  9. set_acl_cache(user, cache_versions, user_acl)
  10. user_acl["user_id"] = user.id
  11. user_acl["is_authenticated"] = bool(user.is_authenticated)
  12. user_acl["is_anonymous"] = bool(user.is_anonymous)
  13. user_acl["is_staff"] = user.is_staff
  14. user_acl["is_superuser"] = user.is_superuser
  15. user_acl["cache_versions"] = cache_versions.copy()
  16. return user_acl
  17. def serialize_user_acl(user_acl):
  18. """serialize authenticated user's ACL"""
  19. serialized_acl = copy.deepcopy(user_acl)
  20. serialized_acl.pop("cache_versions")
  21. for serializer in providers.get_user_acl_serializers():
  22. serializer(serialized_acl)
  23. return serialized_acl