diff --git a/README.md b/README.md index 2beaddf..2ecefc0 100755 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ for: * cron: daily cron configuration for the generation of the diffusions * supervisorctl: audio stream generation, website, sounds monitoring -* nginx: sampe config file (must be adapted) +* nginx: sample config file (must be adapted) The scripts are written with a combination of `cron`, `supervisord`, `nginx` and `gunicorn` in mind. diff --git a/aircox/settings.py b/aircox/settings.py index 0cf7e63..1fb76da 100755 --- a/aircox/settings.py +++ b/aircox/settings.py @@ -6,6 +6,14 @@ from django.conf import settings def ensure (key, default): globals()[key] = getattr(settings, key, default) +# name of the group assigned by default to all users that are created +ensure('AIRCOX_DEFAULT_USER_GROUP', 'Radio Hosts') +ensure('AIRCOX_DEFAULT_USER_GROUP_PERMS', ( + 'change_program', 'change_diffusion', + 'change_sound', + 'add_track', 'change_track', 'delete_track', + 'add_tag', 'change_tag', 'delete_tag', +)) # Directory for the programs data ensure('AIRCOX_PROGRAMS_DIR', diff --git a/aircox/signals.py b/aircox/signals.py index 5bb87a9..13cf2ae 100755 --- a/aircox/signals.py +++ b/aircox/signals.py @@ -1,4 +1,5 @@ -from django.db.models.signals import post_save, pre_delete +from django.db.models.signals import post_save, pre_save, pre_delete, m2m_changed +from django.contrib.auth.models import User, Group, Permission from django.dispatch import receiver from django.utils.translation import ugettext as _, ugettext_lazy @@ -6,6 +7,31 @@ from django.contrib.contenttypes.models import ContentType import aircox.models as models import aircox.utils as utils +import aircox.settings as settings + +# Add a default group to a user when it is created. It also assigns a list +# of permissions to the group if it is created. +# +# - group name: settings.AIRCOX_DEFAULT_USER_GROUP +# - group permissions: settings.AIRCOX_DEFAULT_USER_GROUP_PERMS +# +@receiver(post_save, sender=User) +def user_default_groups(sender, instance, created, *args, **kwargs): + groupName = settings.AIRCOX_DEFAULT_USER_GROUP + if not created or instance.is_superuser or \ + instance.groups.filter(name = groupName).count(): + return + + group, created = Group.objects.get_or_create(name = groupName) + if created: + for codename in settings.AIRCOX_DEFAULT_USER_GROUP_PERMS: + permission = Permission.objects.filter(codename = codename).first() + if permission: + group.permissions.add(permission) + group.save() + + instance.groups.add(group) + # FIXME: avoid copy of the code in schedule_post_saved and # schedule_pre_delete