From ba26387f09de20d9537d075dcea5221fb3532a5a Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Mon, 4 Nov 2024 17:55:21 +0100 Subject: ✨ permissions refactoring: manage deletion permissions - ♻ refactoring "can_do" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../migrations/0255_migrate_delete_permissions.py | 52 ++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 ishtar_common/migrations/0255_migrate_delete_permissions.py (limited to 'ishtar_common/migrations') 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) + ] -- cgit v1.2.3