forked from rc/aircox
		
	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):
 | 
					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', {
 | 
				
			||||||
 | 
					    'Radio Hosts': (
 | 
				
			||||||
        'change_program', 'change_diffusion',
 | 
					        'change_program', 'change_diffusion',
 | 
				
			||||||
        'change_sound',
 | 
					        'change_sound',
 | 
				
			||||||
        'add_track', 'change_track', 'delete_track',
 | 
					        'add_track', 'change_track', 'delete_track',
 | 
				
			||||||
        'add_tag', 'change_tag', 'delete_tag',
 | 
					        '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',
 | 
				
			||||||
 | 
				
			|||||||
@ -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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for groupName, permissions in settings.AIRCOX_DEFAULT_USER_GROUPS.items():
 | 
				
			||||||
 | 
					        if instance.groups.filter(name = groupName).count():
 | 
				
			||||||
 | 
					            continue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        group, created = Group.objects.get_or_create(name = groupName)
 | 
					        group, created = Group.objects.get_or_create(name = groupName)
 | 
				
			||||||
    if created:
 | 
					        if created and permissions:
 | 
				
			||||||
        for codename in settings.AIRCOX_DEFAULT_USER_GROUP_PERMS:
 | 
					            for codename in permissions:
 | 
				
			||||||
                permission = Permission.objects.filter(codename = codename).first()
 | 
					                permission = Permission.objects.filter(codename = codename).first()
 | 
				
			||||||
                if permission:
 | 
					                if permission:
 | 
				
			||||||
                    group.permissions.add(permission)
 | 
					                    group.permissions.add(permission)
 | 
				
			||||||
            group.save()
 | 
					            group.save()
 | 
				
			||||||
 | 
					 | 
				
			||||||
        instance.groups.add(group)
 | 
					        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
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user