settings.AIRCOX_DEFAULT_USER_GROUPS: multiple groups with customizable permissions
This commit is contained in:
		@ -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',
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user