summaryrefslogtreecommitdiff
path: root/ishtar_common/migrations
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2024-11-04 17:55:21 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2025-02-19 14:43:49 +0100
commitba26387f09de20d9537d075dcea5221fb3532a5a (patch)
treee8fadab722e806ee1511ac0f996afcc9fb44ce09 /ishtar_common/migrations
parent547a20789faf6bbc9979357c7f65cbe61e56ed07 (diff)
downloadIshtar-ba26387f09de20d9537d075dcea5221fb3532a5a.tar.bz2
Ishtar-ba26387f09de20d9537d075dcea5221fb3532a5a.zip
✨ permissions refactoring: manage deletion permissions - ♻ refactoring "can_do"
Diffstat (limited to 'ishtar_common/migrations')
-rw-r--r--ishtar_common/migrations/0255_migrate_delete_permissions.py52
1 files changed, 52 insertions, 0 deletions
diff --git a/ishtar_common/migrations/0255_migrate_delete_permissions.py b/ishtar_common/migrations/0255_migrate_delete_permissions.py
new file mode 100644
index 000000000..61b63c0df
--- /dev/null
+++ b/ishtar_common/migrations/0255_migrate_delete_permissions.py
@@ -0,0 +1,52 @@
+# Generated by Django 2.2.28 on 2024-11-04 16:52
+
+from django.db import migrations
+
+
+def migrate_permission(apps, __):
+ Permission = apps.get_model("auth", "permission")
+ Group = apps.get_model("auth", "group")
+ ProfileType = apps.get_model("ishtar_common", "profiletype")
+ print()
+ for modif_group in Group.objects.filter(
+ name__endswith="modification/suppression").all():
+ name = modif_group.name.replace("/suppression", "")
+ modif_group.name = name
+ modif_group.save()
+ delete_permissions = []
+ for permission in modif_group.permissions.filter(
+ codename__startswith="change_").all():
+ codename = permission.codename.replace("change_", "delete_")
+ try:
+ delete_permission = Permission.objects.get(
+ content_type=permission.content_type,
+ codename=codename
+ )
+ delete_permissions.append(delete_permission)
+ if delete_permission in list(modif_group.permissions.all()):
+ modif_group.permissions.remove(delete_permission)
+ except Permission.DoesNotExist:
+ print(f"Permission {codename} does not exist")
+
+ if not delete_permissions:
+ continue
+ delete_group = Group.objects.create(
+ name=name.replace("modification", "suppression")
+ )
+ print(f"* New group: {delete_group.name}")
+ for delete_permission in delete_permissions:
+ delete_group.permissions.add(delete_permission)
+ for profile_type in ProfileType.objects.filter(groups__pk=modif_group.pk).all():
+ profile_type.groups.add(delete_group)
+ print(f"\t- profile type {profile_type.label} updated")
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('ishtar_common', '0254_permissionrequests'),
+ ]
+
+ operations = [
+ migrations.RunPython(migrate_permission)
+ ]