from django.core.management import BaseCommand from django.contrib.auth.models import User, Group , Permission import logging GROUPS = { "Developer": { #General permissions #"log entry" : ["add","delete","change","view"], #"group" : ["add","delete","change","view"], #"permission" : ["add","delete","change","view"], #"user" : ["add","delete","change","view"], #"content type" : ["add","delete","change","view"], #"session" : ["add","delete","change","view"], #Specific permissions "profile" : ["add","delete","change","view"], "experiment" : ["add","delete","change","view"], "configuration" : ["add","delete","change","view"], "device" : ["add","delete","change","view"], "device type" : ["add","delete","change","view"], "generator configuration" : ["add","delete","change","view"], "pedestal configuration" : ["add","delete","change","view"], "usrprx configuration" : ["add","delete","change","view"], "tx code" : ["add","delete","change","view"], "usrptx configuration" : ["add","delete","change","view"], }, "Operator": { #Specific permissions "profile" : ["view"], "experiment" : ["view"], "configuration" : ["view"], "device" : ["view"], "device type" : ["view"], "generator configuration" : ["view"], "pedestal configuration" : ["view"], "usrprx configuration" : ["view"], "tx code" : ["view"], "usrptx configuration" : ["view"], }, } class Command(BaseCommand): help = "Creates read only default permission groups for users" def handle(self, *args, **options): for group_name in GROUPS: try: Group.objects.get(name=group_name) self.stdout.write(f'Local group "{group_name}" currently exists') continue except: new_group = Group.objects.create(name=group_name) # Loop models in group for app_model in GROUPS[group_name]: # Loop permissions in group/model for permission_name in GROUPS[group_name][app_model]: # Generate permission name as Django would generate it name = "Can {} {}".format(permission_name, app_model) self.stdout.write(f'Creating "{name}"') try: model_add_perm = Permission.objects.get(name=name) except Permission.DoesNotExist: logging.warning("Permission not found with name '{}'.".format(name)) continue new_group.permissions.add(model_add_perm)