Skip to content

Commit

Permalink
Fix migrations
Browse files Browse the repository at this point in the history
  • Loading branch information
tortila committed Jun 14, 2023
1 parent 702b643 commit 671bdbf
Show file tree
Hide file tree
Showing 4 changed files with 104 additions and 104 deletions.
62 changes: 1 addition & 61 deletions apps/accounts/migrations/0053_provider_permissions.py
Original file line number Diff line number Diff line change
@@ -1,70 +1,13 @@
# Generated by Django 3.2.19 on 2023-05-23 15:28

from django.db import migrations
from django.contrib.auth import get_user_model
from django.core.exceptions import FieldError
from guardian.shortcuts import assign_perm, remove_perm
from .. import permissions


def assign_object_permissions(apps, schema_editor):
"""
Assign object-level permissions for existing Hostingprovider and Datacenter objects
"""
db_alias = schema_editor.connection.alias

# assign manage_datacenter
Datacenter = apps.get_model("accounts", "Datacenter")

for dc in Datacenter.objects.using(db_alias).filter(user__isnull=False).iterator():
assign_perm(permissions.manage_datacenter.codename, dc.user, dc)

# assign manage_provider
# GOTCHA: catch a FieldError so that this migration does not fail when execued by a test runner
User = get_user_model()
try:
for user in (
User.objects.using(db_alias)
.filter(hostingprovider__isnull=False)
.iterator()
):
assign_perm(
permissions.manage_provider.codename, user, user.hostingprovider
)
except FieldError:
pass


def remove_object_permissions(apps, schema_editor):
"""
Remove object-level permissions for existing Hostingprovider and Datacenter objects
"""
db_alias = schema_editor.connection.alias

# remove manage_datacenter
Datacenter = apps.get_model("accounts", "Datacenter")
for dc in Datacenter.objects.using(db_alias).filter(user__isnull=False).iterator():
remove_perm(permissions.manage_datacenter.codename, dc.user, dc)

# remove manage_provider
# GOTCHA: catch a FieldError so that this migration does not fail when execued by a test runner
User = get_user_model()
try:
for user in (
User.objects.using(db_alias)
.filter(hostingprovider__isnull=False)
.iterator()
):
remove_perm(
permissions.manage_provider.codename, user, user.hostingprovider
)
except FieldError:
pass


class Migration(migrations.Migration):
dependencies = [
("accounts", "0052_merge_20230510_1057"),
('guardian', '__latest__'),
]

operations = [
Expand All @@ -79,7 +22,4 @@ class Migration(migrations.Migration):
"verbose_name": "Hosting Provider",
},
),
migrations.RunPython(
code=assign_object_permissions, reverse_code=remove_object_permissions
),
]
42 changes: 0 additions & 42 deletions apps/accounts/migrations/0055_global_admin_permissions.py

This file was deleted.

102 changes: 102 additions & 0 deletions apps/accounts/migrations/0055_populate_existing_permissions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
# Generated by Django 3.2.19 on 2023-05-31 12:38

from django.db import migrations
from guardian.models import Group
from guardian.shortcuts import assign_perm, remove_perm
from django.contrib.auth import get_user_model
from django.core.exceptions import FieldError
from .. import permissions


def set_admin_global_perms(apps, schema_editor):
"""
Assign global permissions (for all Hostingprovider and Datacenter objects)
for all members of the "admin" group.
"""
db_alias = schema_editor.connection.alias

admin_group = Group.objects.using(db_alias).filter(name="admin").get()
assign_perm(str(permissions.manage_datacenter), admin_group)
assign_perm(str(permissions.manage_provider), admin_group)


def remove_admin_global_perms(apps, schema_editor):
"""
Remove global permissions (for all Hostingprovider and Datacenter objects)
from all members of the "admin" group.
"""
db_alias = schema_editor.connection.alias

admin_group = Group.objects.using(db_alias).filter(name="admin").get()
remove_perm(str(permissions.manage_datacenter), admin_group)
remove_perm(str(permissions.manage_provider), admin_group)


def assign_object_permissions(apps, schema_editor):
"""
Assign object-level permissions for existing Hostingprovider and Datacenter objects
"""
db_alias = schema_editor.connection.alias
User = get_user_model()

# assign manage_datacenter
Datacenter = apps.get_model("accounts", "Datacenter")

for dc in (
Datacenter.objects.using(db_alias).filter(created_by__isnull=False).iterator()
):
user = User.objects.using(db_alias).get(id=dc.created_by.id)
assign_perm(permissions.manage_datacenter.codename, user, dc)

# assign manage_provider
Hostingprovider = apps.get_model("accounts", "Hostingprovider")

for hp in (
Hostingprovider.objects.using(db_alias)
.filter(created_by__isnull=False)
.iterator()
):
user = User.objects.using(db_alias).get(id=hp.created_by.id)
assign_perm(permissions.manage_provider.codename, user, hp)


def remove_object_permissions(apps, schema_editor):
"""
Remove object-level permissions for existing Hostingprovider and Datacenter objects
"""
db_alias = schema_editor.connection.alias
User = get_user_model()

# remove manage_datacenter
Datacenter = apps.get_model("accounts", "Datacenter")
for dc in (
Datacenter.objects.using(db_alias).filter(created_by__isnull=False).iterator()
):
user = User.objects.using(db_alias).get(id=dc.created_by.id)
remove_perm(permissions.manage_datacenter.codename, user, dc)

# remove manage_provider
Hostingprovider = apps.get_model("accounts", "Hostingprovider")

for hp in (
Hostingprovider.objects.using(db_alias)
.filter(created_by__isnull=False)
.iterator()
):
user = User.objects.using(db_alias).get(id=hp.created_by.id)
remove_perm(permissions.manage_provider.codename, user, hp)


class Migration(migrations.Migration):
dependencies = [
("accounts", "0054_hostingprovider_datacenter_created_by"),
]

operations = [
migrations.RunPython(
code=set_admin_global_perms, reverse_code=remove_admin_global_perms
),
migrations.RunPython(
code=assign_object_permissions, reverse_code=remove_object_permissions
),
]
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

class Migration(migrations.Migration):
dependencies = [
("accounts", "0055_global_admin_permissions"),
("accounts", "0055_populate_existing_permissions"),
]

operations = [
Expand Down

0 comments on commit 671bdbf

Please sign in to comment.