From 0434712dc9af925a32021fab8201a06ec5c979a7 Mon Sep 17 00:00:00 2001 From: Akita Noek Date: Tue, 19 Apr 2016 22:10:47 -0400 Subject: [PATCH] Complete the removal of cycle support in RBAC We removed the actual need for this when we broke the org<->team cycle. This patch removes the code we had to support that, but since it's costly and unused, it's now nixxed. --- awx/main/models/rbac.py | 10 --- awx/main/tests/functional/test_rbac_core.py | 94 --------------------- 2 files changed, 104 deletions(-) diff --git a/awx/main/models/rbac.py b/awx/main/models/rbac.py index 97f661a15a..da9033848c 100644 --- a/awx/main/models/rbac.py +++ b/awx/main/models/rbac.py @@ -226,19 +226,10 @@ class Role(CommonModelNameNotUnique): 'roles_table': Role._meta.db_table, } - def split_ids_for_sqlite(role_ids): for i in xrange(0, len(role_ids), 999): yield role_ids[i:i + 999] - for ids in split_ids_for_sqlite(role_ids_to_rebuild): - sql_params['ids'] = ','.join(str(x) for x in ids) - cursor.execute(''' - DELETE FROM %(ancestors_table)s - WHERE ancestor_id IN (%(ids)s) - ''' % sql_params) - - while role_ids_to_rebuild: if loop_ct > 1000: raise Exception('Ancestry role rebuilding error: infinite loop detected') @@ -372,4 +363,3 @@ def get_roles_on_resource(resource, accessor): object_id=resource.id ).values_list('role_field', flat=True) } - diff --git a/awx/main/tests/functional/test_rbac_core.py b/awx/main/tests/functional/test_rbac_core.py index c70f221c7d..8a153a550a 100644 --- a/awx/main/tests/functional/test_rbac_core.py +++ b/awx/main/tests/functional/test_rbac_core.py @@ -175,100 +175,6 @@ def test_hierarchy_rebuilding_multi_path(): assert X.is_ancestor_of(D) is False -@pytest.mark.django_db -def test_hierarchy_rebuilding_loops1(organization, team): - 'Tests ancestry rebuilding loops are involved' - - - assert team.admin_role.is_ancestor_of(organization.admin_role) is False - assert organization.admin_role.is_ancestor_of(team.admin_role) - - team.admin_role.children.add(organization.admin_role) - - assert team.admin_role.is_ancestor_of(organization.admin_role) - assert organization.admin_role.is_ancestor_of(team.admin_role) - - team.admin_role.children.remove(organization.admin_role) - - assert team.admin_role.is_ancestor_of(organization.admin_role) is False - assert organization.admin_role.is_ancestor_of(team.admin_role) - - team.admin_role.children.add(organization.admin_role) - - - X = Role.objects.create(name='X') - X.children.add(organization.admin_role) - assert X.is_ancestor_of(team.admin_role) - assert X.is_ancestor_of(organization.admin_role) - assert organization.admin_role.is_ancestor_of(X) is False - assert team.admin_role.is_ancestor_of(X) is False - - #print(X.descendents.filter(id=organization.admin_role.id).count()) - #print(X.children.filter(id=organization.admin_role.id).count()) - X.children.remove(organization.admin_role) - X.rebuild_role_ancestor_list() - #print(X.descendents.filter(id=organization.admin_role.id).count()) - #print(X.children.filter(id=organization.admin_role.id).count()) - - assert X.is_ancestor_of(team.admin_role) is False - assert X.is_ancestor_of(organization.admin_role) is False - - - -@pytest.mark.django_db -def test_hierarchy_rebuilding_loops(): - 'Tests ancestry rebuilding loops are involved' - - X = Role.objects.create(name='X') - A = Role.objects.create(name='A') - B = Role.objects.create(name='B') - C = Role.objects.create(name='C') - - A.children.add(B) - B.children.add(C) - C.children.add(A) - X.children.add(A) - - assert X.is_ancestor_of(A) - assert X.is_ancestor_of(B) - assert X.is_ancestor_of(C) - - assert A.is_ancestor_of(B) - assert A.is_ancestor_of(C) - assert B.is_ancestor_of(C) - assert B.is_ancestor_of(A) - assert C.is_ancestor_of(A) - assert C.is_ancestor_of(B) - - X.children.remove(A) - X.rebuild_role_ancestor_list() - - assert X.is_ancestor_of(A) is False - assert X.is_ancestor_of(B) is False - assert X.is_ancestor_of(C) is False - - X.children.add(A) - - assert X.is_ancestor_of(A) - assert X.is_ancestor_of(B) - assert X.is_ancestor_of(C) - - C.children.remove(A) - - assert A.is_ancestor_of(B) - assert A.is_ancestor_of(C) - assert B.is_ancestor_of(C) - assert B.is_ancestor_of(A) is False - assert C.is_ancestor_of(A) is False - assert C.is_ancestor_of(B) is False - - assert X.is_ancestor_of(A) - assert X.is_ancestor_of(B) - assert X.is_ancestor_of(C) - - - - @pytest.mark.django_db def test_auto_parenting(): org1 = Organization.objects.create(name='org1')