from django.contrib.auth.models import Group, Permission from django.contrib.contenttypes.models import ContentType from django.core.management.base import BaseCommand from apps.accounts.permissions import DEFAULT_GROUPS, PERMISSIONS class Command(BaseCommand): help = "Seed MVP permissions and default user groups." def handle(self, *args, **options): content_type, _ = ContentType.objects.get_or_create( app_label="system", model="platformpermission", ) permissions_by_codename: dict[str, Permission] = {} for spec in PERMISSIONS: permission, _ = Permission.objects.get_or_create( content_type=content_type, codename=spec.codename, defaults={"name": spec.name}, ) if permission.name != spec.name: permission.name = spec.name permission.save(update_fields=["name"]) permissions_by_codename[spec.codename] = permission for group_name, codenames in DEFAULT_GROUPS.items(): group, _ = Group.objects.get_or_create(name=group_name) group.permissions.set(permissions_by_codename[codename] for codename in codenames) self.stdout.write(self.style.SUCCESS("Seeded permissions and groups."))