diff options
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 |
commit | ba26387f09de20d9537d075dcea5221fb3532a5a (patch) | |
tree | e8fadab722e806ee1511ac0f996afcc9fb44ce09 /ishtar_common/migrations | |
parent | 547a20789faf6bbc9979357c7f65cbe61e56ed07 (diff) | |
download | Ishtar-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.py | 52 |
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) + ] |