mirror of
https://github.com/ansible/awx.git
synced 2024-10-31 23:51:09 +03:00
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.
This commit is contained in:
parent
70148dc2f3
commit
0434712dc9
@ -226,19 +226,10 @@ class Role(CommonModelNameNotUnique):
|
|||||||
'roles_table': Role._meta.db_table,
|
'roles_table': Role._meta.db_table,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def split_ids_for_sqlite(role_ids):
|
def split_ids_for_sqlite(role_ids):
|
||||||
for i in xrange(0, len(role_ids), 999):
|
for i in xrange(0, len(role_ids), 999):
|
||||||
yield role_ids[i:i + 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:
|
while role_ids_to_rebuild:
|
||||||
if loop_ct > 1000:
|
if loop_ct > 1000:
|
||||||
raise Exception('Ancestry role rebuilding error: infinite loop detected')
|
raise Exception('Ancestry role rebuilding error: infinite loop detected')
|
||||||
@ -372,4 +363,3 @@ def get_roles_on_resource(resource, accessor):
|
|||||||
object_id=resource.id
|
object_id=resource.id
|
||||||
).values_list('role_field', flat=True)
|
).values_list('role_field', flat=True)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -175,100 +175,6 @@ def test_hierarchy_rebuilding_multi_path():
|
|||||||
assert X.is_ancestor_of(D) is False
|
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
|
@pytest.mark.django_db
|
||||||
def test_auto_parenting():
|
def test_auto_parenting():
|
||||||
org1 = Organization.objects.create(name='org1')
|
org1 = Organization.objects.create(name='org1')
|
||||||
|
Loading…
Reference in New Issue
Block a user