Skip to content
Snippets Groups Projects
Verified Commit 9df38198 authored by Ernesto Rico Schmidt's avatar Ernesto Rico Schmidt
Browse files

refactor: avoid repetition(s)

parent 4d072a8f
No related branches found
No related tags found
No related merge requests found
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")
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment