providers.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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_default_permissions(self):
  17. default_permissions = {}
  18. for provider, module in self._providers:
  19. try:
  20. default_data = module.DEFAULT_PERMISSIONS
  21. except AttributeError:
  22. message = "'%s' object has no attribute '%s'"
  23. raise AttributeError(
  24. message % (provider, 'DEFAULT_PERMISSIONS'))
  25. default_permissions
  26. def get_change_permissions_forms(self, role, data=None):
  27. self.initialize_providers()
  28. role_permissions = role.permissions
  29. forms = []
  30. for provider, module in self._providers:
  31. try:
  32. default_data = module.DEFAULT_PERMISSIONS
  33. except AttributeError:
  34. message = "'%s' object has no attribute '%s'"
  35. raise AttributeError(
  36. message % (provider, 'DEFAULT_PERMISSIONS'))
  37. try:
  38. module.change_permissions_form
  39. except AttributeError:
  40. message = "'%s' object has no attribute '%s'"
  41. raise AttributeError(
  42. message % (provider, 'change_permissions_form'))
  43. FormType = module.change_permissions_form(role)
  44. if FormType:
  45. if data:
  46. forms.append(FormType(data, prefix=provider))
  47. else:
  48. initial_data = role_permissions.get(provider, default_data)
  49. forms.append(FormType(initial=initial_data,
  50. prefix=provider))
  51. return forms
  52. def build_acl_cache(self, roles):
  53. self.initialize_providers()
  54. def hydrate_acl_cache(self, acl):
  55. self.initialize_providers()
  56. def get_acl_by_token(self, token):
  57. pass
  58. def get_acl_by_roles(self, roles):
  59. pass
  60. providers = PermissionProviders()