providers.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. from importlib import import_module
  2. from django.conf import settings
  3. class PermissionProviders(object):
  4. def __init__(self):
  5. self._initialized = False
  6. self._providers = []
  7. self._providers_dict = {}
  8. def initialize_providers(self):
  9. if not self._initialized:
  10. self.import_providers()
  11. self._initialized = True
  12. def import_providers(self):
  13. for namespace in settings.MISAGO_PERMISSION_PROVIDERS:
  14. self._providers.append((namespace, import_module(namespace)))
  15. self._providers_dict[namespace] = import_module(namespace)
  16. def get_change_permissions_forms(self, role):
  17. self.initialize_providers()
  18. forms = []
  19. for provider, module in self._providers:
  20. try:
  21. module.change_permissions_form
  22. except AttributeError:
  23. message = "'%s' object has no attribute '%s'"
  24. raise AttributeError(
  25. message % (provider, 'change_permissions_form'))
  26. forms.append(module.change_permissions_form(role))
  27. return [f for f in forms if f]
  28. def build_acl_cache(self, roles):
  29. self.initialize_providers()
  30. def hydrate_acl_cache(self, acl):
  31. self.initialize_providers()
  32. def get_acl_by_token(self, token):
  33. pass
  34. def get_acl_by_roles(self, roles):
  35. pass
  36. providers = PermissionProviders()