diff --git a/aircox/settings.py b/aircox/settings.py index 1fb76da..46abbb4 100755 --- a/aircox/settings.py +++ b/aircox/settings.py @@ -6,14 +6,18 @@ 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', -)) +# group to assign to users at their creation, along with the permissions +# to add to each group. +ensure('AIRCOX_DEFAULT_USER_GROUPS', { + 'Radio Hosts': ( + 'change_program', 'change_diffusion', + 'change_sound', + 'add_track', 'change_track', 'delete_track', + 'add_tag', 'change_tag', 'delete_tag', + ), + # ensure user can log in using Wagtail + 'Editors': None +}) # Directory for the programs data ensure('AIRCOX_PROGRAMS_DIR', diff --git a/aircox/signals.py b/aircox/signals.py index 13cf2ae..4b55907 100755 --- a/aircox/signals.py +++ b/aircox/signals.py @@ -17,25 +17,25 @@ import aircox.settings as settings # @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(): + if not created or instance.is_superuser: 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() + for groupName, permissions in settings.AIRCOX_DEFAULT_USER_GROUPS.items(): + if instance.groups.filter(name = groupName).count(): + continue - instance.groups.add(group) + group, created = Group.objects.get_or_create(name = groupName) + if created and permissions: + for codename in permissions: + 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 - @receiver(post_save, sender=models.Schedule) def schedule_post_saved(sender, instance, created, *args, **kwargs): # TODO: case instance.program has changed