|
@@ -2,78 +2,81 @@ from importlib import import_module
|
|
from django.conf import settings
|
|
from django.conf import settings
|
|
|
|
|
|
|
|
|
|
|
|
+__ALL__ = ['providers', 'get_default_permissions',
|
|
|
|
+ 'get_change_permissions_forms']
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+# Manager for permission providers
|
|
class PermissionProviders(object):
|
|
class PermissionProviders(object):
|
|
def __init__(self):
|
|
def __init__(self):
|
|
self._initialized = False
|
|
self._initialized = False
|
|
self._providers = []
|
|
self._providers = []
|
|
self._providers_dict = {}
|
|
self._providers_dict = {}
|
|
|
|
|
|
- def initialize_providers(self):
|
|
|
|
|
|
+ def _assert_providers_imported(self):
|
|
if not self._initialized:
|
|
if not self._initialized:
|
|
- self.import_providers()
|
|
|
|
|
|
+ self._import_providers()
|
|
self._initialized = True
|
|
self._initialized = True
|
|
|
|
|
|
- def import_providers(self):
|
|
|
|
|
|
+ def _import_providers(self):
|
|
for namespace in settings.MISAGO_PERMISSION_PROVIDERS:
|
|
for namespace in settings.MISAGO_PERMISSION_PROVIDERS:
|
|
self._providers.append((namespace, import_module(namespace)))
|
|
self._providers.append((namespace, import_module(namespace)))
|
|
self._providers_dict[namespace] = import_module(namespace)
|
|
self._providers_dict[namespace] = import_module(namespace)
|
|
|
|
|
|
- def get_default_permissions(self):
|
|
|
|
- default_permissions = {}
|
|
|
|
|
|
+ def list(self):
|
|
|
|
+ self._assert_providers_imported()
|
|
|
|
+ return self._providers
|
|
|
|
|
|
- for provider, module in self._providers:
|
|
|
|
- try:
|
|
|
|
- default_data = module.DEFAULT_PERMISSIONS
|
|
|
|
- except AttributeError:
|
|
|
|
- message = "'%s' object has no attribute '%s'"
|
|
|
|
- raise AttributeError(
|
|
|
|
- message % (provider, 'DEFAULT_PERMISSIONS'))
|
|
|
|
|
|
+ def dict(self):
|
|
|
|
+ self._assert_providers_imported()
|
|
|
|
+ return self._providers_dict
|
|
|
|
|
|
- default_permissions
|
|
|
|
|
|
|
|
|
|
+providers = PermissionProviders()
|
|
|
|
|
|
- def get_change_permissions_forms(self, role, data=None):
|
|
|
|
- self.initialize_providers()
|
|
|
|
- role_permissions = role.permissions
|
|
|
|
|
|
|
|
- forms = []
|
|
|
|
- for provider, module in self._providers:
|
|
|
|
- try:
|
|
|
|
- default_data = module.DEFAULT_PERMISSIONS
|
|
|
|
- except AttributeError:
|
|
|
|
- message = "'%s' object has no attribute '%s'"
|
|
|
|
- raise AttributeError(
|
|
|
|
- message % (provider, 'DEFAULT_PERMISSIONS'))
|
|
|
|
- try:
|
|
|
|
- module.change_permissions_form
|
|
|
|
- except AttributeError:
|
|
|
|
- message = "'%s' object has no attribute '%s'"
|
|
|
|
- raise AttributeError(
|
|
|
|
- message % (provider, 'change_permissions_form'))
|
|
|
|
|
|
+def get_default_permissions():
|
|
|
|
+ default_permissions = {}
|
|
|
|
|
|
- FormType = module.change_permissions_form(role)
|
|
|
|
|
|
+ for provider, module in providers.list():
|
|
|
|
+ try:
|
|
|
|
+ default_data = module.DEFAULT_PERMISSIONS
|
|
|
|
+ except AttributeError:
|
|
|
|
+ message = "'%s' object has no attribute '%s'"
|
|
|
|
+ raise AttributeError(
|
|
|
|
+ message % (provider, 'DEFAULT_PERMISSIONS'))
|
|
|
|
|
|
- if FormType:
|
|
|
|
- if data:
|
|
|
|
- forms.append(FormType(data, prefix=provider))
|
|
|
|
- else:
|
|
|
|
- initial_data = role_permissions.get(provider, default_data)
|
|
|
|
- forms.append(FormType(initial=initial_data,
|
|
|
|
- prefix=provider))
|
|
|
|
|
|
+ default_permissions[provider] = default_data
|
|
|
|
|
|
- return forms
|
|
|
|
|
|
+ return default_permissions
|
|
|
|
|
|
- def build_acl_cache(self, roles):
|
|
|
|
- self.initialize_providers()
|
|
|
|
|
|
|
|
- def hydrate_acl_cache(self, acl):
|
|
|
|
- self.initialize_providers()
|
|
|
|
|
|
+def get_change_permissions_forms(role, data=None):
|
|
|
|
+ role_permissions = role.permissions
|
|
|
|
|
|
- def get_acl_by_token(self, token):
|
|
|
|
- pass
|
|
|
|
|
|
+ forms = []
|
|
|
|
+ for provider, module in providers.list():
|
|
|
|
+ try:
|
|
|
|
+ default_data = module.DEFAULT_PERMISSIONS
|
|
|
|
+ except AttributeError:
|
|
|
|
+ message = "'%s' object has no attribute '%s'"
|
|
|
|
+ raise AttributeError(
|
|
|
|
+ message % (provider, 'DEFAULT_PERMISSIONS'))
|
|
|
|
+ try:
|
|
|
|
+ module.change_permissions_form
|
|
|
|
+ except AttributeError:
|
|
|
|
+ message = "'%s' object has no attribute '%s'"
|
|
|
|
+ raise AttributeError(
|
|
|
|
+ message % (provider, 'change_permissions_form'))
|
|
|
|
|
|
- def get_acl_by_roles(self, roles):
|
|
|
|
- pass
|
|
|
|
|
|
+ FormType = module.change_permissions_form(role)
|
|
|
|
|
|
|
|
+ if FormType:
|
|
|
|
+ if data:
|
|
|
|
+ forms.append(FormType(data, prefix=provider))
|
|
|
|
+ else:
|
|
|
|
+ initial_data = role_permissions.get(provider, default_data)
|
|
|
|
+ forms.append(FormType(initial=initial_data,
|
|
|
|
+ prefix=provider))
|
|
|
|
|
|
-providers = PermissionProviders()
|
|
|
|
|
|
+ return forms
|