From 9df38198be6df2b12513f4d54fb3dd0279da253e Mon Sep 17 00:00:00 2001 From: Ernesto Rico Schmidt <ernesto@helsinki.at> Date: Tue, 2 Apr 2024 16:50:21 -0400 Subject: [PATCH] refactor: avoid repetition(s) --- program/management/commands/addpermissions.py | 84 ++++++------------- 1 file changed, 25 insertions(+), 59 deletions(-) diff --git a/program/management/commands/addpermissions.py b/program/management/commands/addpermissions.py index 9dacb9da..f67c366c 100644 --- a/program/management/commands/addpermissions.py +++ b/program/management/commands/addpermissions.py @@ -1,83 +1,49 @@ from django.conf import settings from django.contrib.auth.models import Group, Permission from django.core.management.base import BaseCommand +from django.db.models import QuerySet class Command(BaseCommand): help = "add permissions" + def add_permissions(self, group: Group, permissions: QuerySet, name: str): + self.stdout.write(f"Adding {name} permissions to the '{group.name}' group... ", ending="") + self.stdout.flush() + group.permissions.add(*permissions) + self.stdout.write(self.style.SUCCESS(str(len(permissions)))) + def handle(self, *args, **options): - program_group = Group.objects.get(name=settings.PRIVILEGED_GROUP) + privileged_group = Group.objects.get(name=settings.PRIVILEGED_GROUP) + host_group = Group.objects.get(name=settings.ENTITLED_GROUPS[0]) + host_plus_group = Group.objects.get(name=settings.ENTITLED_GROUPS[1]) + app_permissions = Permission.objects.filter(content_type__app_label="program").exclude( codename__startswith="edit" ) - self.stdout.write( - f"Adding app permissions to the '{program_group}' group... ", - ending="", - ) - self.stdout.flush() - program_group.permissions.add(*app_permissions) - self.stdout.write(self.style.SUCCESS(str(len(app_permissions)))) - - host_group = Group.objects.get(name=settings.ENTITLED_GROUPS[0]) - model_permissions = Permission.objects.filter( - content_type__model__in=["note", "notelink"] - ).exclude(codename__startswith="edit") - self.stdout.write( - f"Adding model permissions on note & notelink to the '{host_group}' group... ", - ending="", + default_model_permissions = ( + Permission.objects.filter(content_type__model__in=["note", "notelink"]) + .exclude(codename__startswith="edit") + .exclude(codename__startswith="create") + .exclude(codename__startswith="update") ) - self.stdout.flush() - host_group.permissions.add(*model_permissions) - self.stdout.write(self.style.SUCCESS(str(len(model_permissions)))) - - host_plus_group = Group.objects.get(name=settings.ENTITLED_GROUPS[1]) change_permissions = Permission.objects.filter( codename__startswith="change", content_type__model__in=["host", "note", "show"] ) - self.stdout.write( - f"Adding change permissions on host, note & show to the '{host_plus_group}' group... ", - ending="", - ) - host_plus_group.permissions.add(*change_permissions) - self.stdout.write(self.style.SUCCESS(str(len(change_permissions)))) - self.stdout.flush() edit_permissions = Permission.objects.filter( codename__startswith="edit", content_type__model__in=["host", "note", "show"] ) - self.stdout.write( - f"Adding edit permissions on host, note & show to the '{host_plus_group}' group... ", - ending="", - ) - self.stdout.flush() - host_plus_group.permissions.add(*edit_permissions) - self.stdout.write(self.style.SUCCESS(str(len(edit_permissions)))) - - self.stdout.write( - f"Adding edit permissions on host, note & show to the '{program_group}' group... ", - ending="", + create_permissions = Permission.objects.filter( + codename__startswith="create", content_type__model__in=["note"] ) - self.stdout.flush() - program_group.permissions.add(*edit_permissions) - self.stdout.write(self.style.SUCCESS(str(len(edit_permissions)))) - update_permissions = Permission.objects.filter( codename__startswith="update", content_type__model__in=["host", "note", "show"] ) - self.stdout.write( - f"Adding update permissions on host, note & show to the '{program_group}' group... ", - ending="", - ) - self.stdout.flush() - program_group.permissions.add(*update_permissions) - self.stdout.write(self.style.SUCCESS(str(len(update_permissions)))) - create_permissions = Permission.objects.filter( - codename__startswith="create", content_type__model__in=["note"] - ) - self.stdout.write( - f"Adding create permissions on note to the '{program_group}' group... ", ending="" - ) - self.stdout.flush() - program_group.permissions.add(*create_permissions) - self.stdout.write(self.style.SUCCESS(str(len(update_permissions)))) + self.add_permissions(privileged_group, app_permissions, "default app level") + self.add_permissions(privileged_group, edit_permissions, "custom edit field") + self.add_permissions(privileged_group, create_permissions, "custom create") + self.add_permissions(privileged_group, update_permissions, "custom update") + self.add_permissions(host_group, default_model_permissions, "default model") + self.add_permissions(host_plus_group, change_permissions, "default change") + self.add_permissions(host_plus_group, edit_permissions, "custom edit field") -- GitLab