create_groups.py
70 lines
| 2.8 KiB
| text/x-python
|
PythonLexer
r445 | 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) |