From 9ca2b763e466d08e6c80398a653005d11649e0de Mon Sep 17 00:00:00 2001 From: Jon Massey Date: Wed, 2 Oct 2024 13:17:22 +0100 Subject: [PATCH] Migrate CoreDeveloper to StaffAreaAdministrator --- ...coredeveloper_to_staffareaadministrator.py | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 jobserver/migrations/0008_coredeveloper_to_staffareaadministrator.py diff --git a/jobserver/migrations/0008_coredeveloper_to_staffareaadministrator.py b/jobserver/migrations/0008_coredeveloper_to_staffareaadministrator.py new file mode 100644 index 000000000..e86a624eb --- /dev/null +++ b/jobserver/migrations/0008_coredeveloper_to_staffareaadministrator.py @@ -0,0 +1,44 @@ +# Generated by Django 5.1.1 on 2024-10-02 11:00 + +from django.db import migrations + +from jobserver.authorization.roles import StaffAreaAdministrator + + +# We want to eventually remove the "real" CoreDeveloper so make a fake one here +class CoreDeveloper: + __module__ = "jobserver.authorization.roles" + + +def change_user_role(apps, from_role, to_role): + User = apps.get_model("jobserver", "User") + users = User.objects.filter(roles__contains=from_role) + for user in users: + # we can't rely on comparison of our fake class for .remove() + for role in user.roles: + if role.__qualname__ == from_role.__qualname__: + user.roles.remove(role) + break + user.roles.append(to_role) + User.objects.bulk_update(users, ["roles"]) + + +def coredeveloper_to_staffadministrator(apps, schema_editor): + change_user_role(apps, CoreDeveloper, StaffAreaAdministrator) + + +def staffadministrator_to_coredeveloper(apps, schema_editor): + change_user_role(apps, StaffAreaAdministrator, CoreDeveloper) + + +class Migration(migrations.Migration): + dependencies = [ + ("jobserver", "0007_remove_user_is_staff_remove_user_is_superuser"), + ] + + operations = [ + migrations.RunPython( + coredeveloper_to_staffadministrator, + reverse_code=staffadministrator_to_coredeveloper, + ) + ]