diff --git a/apps/permissions/post_init.py b/apps/permissions/post_init.py new file mode 100644 index 0000000000..67d472d840 --- /dev/null +++ b/apps/permissions/post_init.py @@ -0,0 +1,26 @@ +from __future__ import absolute_import + +from django.contrib.auth.models import User +from django.db.models.signals import post_save +from django.core.exceptions import ObjectDoesNotExist + + +def user_post_save(sender, instance, **kwargs): + from .settings import DEFAULT_ROLES + + if kwargs.get('created', False): + for default_role in SETTING_DEFAULT_ROLES: + if isinstance(default_role, Role): + #If a model is passed, execute method + default_role.add_member(instance) + else: + #If a role name is passed, lookup the corresponding model + try: + role = Role.objects.get(name=default_role) + role.add_member(instance) + except ObjectDoesNotExist: + pass + + +def init_signal_handler(): + post_save.connect(user_post_save, sender=User) diff --git a/apps/permissions/registry.py b/apps/permissions/registry.py new file mode 100644 index 0000000000..7619c87aba --- /dev/null +++ b/apps/permissions/registry.py @@ -0,0 +1,25 @@ +from __future__ import absolute_import + +from django.utils.translation import ugettext_lazy as _ + +from smart_settings import LocalScope + +from .icons import icon_permissions +from .links import role_list + +name = 'permissions' +label = _(u'Permissions') +description = _(u'Handles the permissions in a project.') +icon = icon_permissions +dependencies = ['app_registry', 'smart_settings'] + +settings=[ + { + 'name': 'DEFAULT_ROLES', + 'default': [], + 'description': _(u'A list of existing roles that are automatically assigned to newly created users'), + 'scopes': [LocalScope()] + } +] + +setup_links=[role_list]