|
|
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)
|