feat: add stage 0 foundation
This commit is contained in:
1
backend/apps/accounts/management/__init__.py
Normal file
1
backend/apps/accounts/management/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
1
backend/apps/accounts/management/commands/__init__.py
Normal file
1
backend/apps/accounts/management/commands/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
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."))
|
||||
Reference in New Issue
Block a user