settings.AIRCOX_DEFAULT_USER_GROUPS: multiple groups with customizable permissions

This commit is contained in:
bkfox 2016-12-29 19:07:39 +01:00
parent 65b4d8244d
commit 777dc475a5
2 changed files with 24 additions and 20 deletions

View File

@ -6,14 +6,18 @@ from django.conf import settings
def ensure (key, default): def ensure (key, default):
globals()[key] = getattr(settings, key, default) globals()[key] = getattr(settings, key, default)
# name of the group assigned by default to all users that are created # group to assign to users at their creation, along with the permissions
ensure('AIRCOX_DEFAULT_USER_GROUP', 'Radio Hosts') # to add to each group.
ensure('AIRCOX_DEFAULT_USER_GROUP_PERMS', ( ensure('AIRCOX_DEFAULT_USER_GROUPS', {
'change_program', 'change_diffusion', 'Radio Hosts': (
'change_sound', 'change_program', 'change_diffusion',
'add_track', 'change_track', 'delete_track', 'change_sound',
'add_tag', 'change_tag', 'delete_tag', '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 # Directory for the programs data
ensure('AIRCOX_PROGRAMS_DIR', ensure('AIRCOX_PROGRAMS_DIR',

View File

@ -17,25 +17,25 @@ import aircox.settings as settings
# #
@receiver(post_save, sender=User) @receiver(post_save, sender=User)
def user_default_groups(sender, instance, created, *args, **kwargs): def user_default_groups(sender, instance, created, *args, **kwargs):
groupName = settings.AIRCOX_DEFAULT_USER_GROUP if not created or instance.is_superuser:
if not created or instance.is_superuser or \
instance.groups.filter(name = groupName).count():
return return
group, created = Group.objects.get_or_create(name = groupName) for groupName, permissions in settings.AIRCOX_DEFAULT_USER_GROUPS.items():
if created: if instance.groups.filter(name = groupName).count():
for codename in settings.AIRCOX_DEFAULT_USER_GROUP_PERMS: continue
permission = Permission.objects.filter(codename = codename).first()
if permission:
group.permissions.add(permission)
group.save()
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 # FIXME: avoid copy of the code in schedule_post_saved and
# schedule_pre_delete # schedule_pre_delete
@receiver(post_save, sender=models.Schedule) @receiver(post_save, sender=models.Schedule)
def schedule_post_saved(sender, instance, created, *args, **kwargs): def schedule_post_saved(sender, instance, created, *args, **kwargs):
# TODO: case instance.program has changed # TODO: case instance.program has changed