34 lines
1.3 KiB
Python
34 lines
1.3 KiB
Python
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."))
|