diff --git a/awx/main/migrations/0004_rbac_migrations.py b/awx/main/migrations/0004_rbac_migrations.py new file mode 100644 index 0000000000..e6c221272d --- /dev/null +++ b/awx/main/migrations/0004_rbac_migrations.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from awx.main.migrations import _rbac as rbac +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0003_rbac_changes'), + ] + + operations = [ + migrations.RunPython(rbac.migrate_organization, rbac.unmigrate_organization), + ] diff --git a/awx/main/migrations/_rbac.py b/awx/main/migrations/_rbac.py new file mode 100644 index 0000000000..3c2a176b69 --- /dev/null +++ b/awx/main/migrations/_rbac.py @@ -0,0 +1,17 @@ +from collections import defaultdict + +def migrate_organization(apps, schema_editor): + migrations = defaultdict(list) + organization = apps.get_model('main', "Organization") + for org in organization.objects.all(): + for admin in org.admins.all(): + org.admin_role.members.add(admin) + migrations[org.name].append(admin) + for user in org.users.all(): + org.auditor_role.members.add(user) + migrations[org.name].append(user) + return migrations + + +def unmigrate_organization(apps, schema_editor): + pass diff --git a/awx/main/models/organization.py b/awx/main/models/organization.py index 306a4ff42b..62636e42e6 100644 --- a/awx/main/models/organization.py +++ b/awx/main/models/organization.py @@ -76,16 +76,6 @@ class Organization(CommonModel, ResourceMixin): script.save() super(Organization, self).mark_inactive(save=save) - def migrate_to_rbac(self): - migrated_users = [] - for admin in self.admins.all(): - self.admin_role.members.add(admin) - migrated_users.append(admin) - for user in self.users.all(): - self.auditor_role.members.add(user) - migrated_users.append(user) - return migrated_users - class Team(CommonModelNameNotUnique, ResourceMixin): ''' diff --git a/awx/main/tests/functional/test_rbac_organization.py b/awx/main/tests/functional/test_rbac_organization.py index 1eadd5a866..67422208aa 100644 --- a/awx/main/tests/functional/test_rbac_organization.py +++ b/awx/main/tests/functional/test_rbac_organization.py @@ -1,6 +1,9 @@ import pytest +from awx.main.migrations import _rbac as rbac from awx.main.access import OrganizationAccess +from django.apps import apps + @pytest.mark.django_db def test_organization_migration_admin(organization, permissions, user): @@ -9,8 +12,9 @@ def test_organization_migration_admin(organization, permissions, user): assert not organization.accessible_by(u, permissions['admin']) - migrated_users = organization.migrate_to_rbac() - assert len(migrated_users) == 1 + migrations = rbac.migrate_organization(apps, None) + + assert len(migrations) == 1 assert organization.accessible_by(u, permissions['admin']) @pytest.mark.django_db @@ -20,8 +24,9 @@ def test_organization_migration_user(organization, permissions, user): assert not organization.accessible_by(u, permissions['auditor']) - migrated_users = organization.migrate_to_rbac() - assert len(migrated_users) == 1 + migrations = rbac.migrate_organization(apps, None) + + assert len(migrations) == 1 assert organization.accessible_by(u, permissions['auditor']) @pytest.mark.django_db