Remove the role_chain.py module

it wound up being unworkable, and I think ultimately we only need to
check the immediate parentage of each role.
This commit is contained in:
Jeff Bradberry 2024-05-08 10:39:26 -04:00
parent d67af79451
commit 6a317cca1b

View File

@ -1,54 +0,0 @@
from collections import defaultdict
import os
import sys
from django.contrib.contenttypes.models import ContentType
from awx.main.fields import ImplicitRoleField
from awx.main.models.rbac import Role
role_id = int(os.environ.get('role'))
role = Role.objects.get(id=role_id)
all_roles = {role,}
graph = defaultdict(set)
# Role parents
new_parents = {role,}
while new_parents:
old_parents = new_parents
new_parents = set()
for r in old_parents:
new_parents |= (set(r.parents.all()) - all_roles)
for p in r.parents.all():
graph[p.id].add(r.id)
all_roles |= new_parents
# Role children
new_children = {role,}
while new_children:
old_children = new_children
new_children = set()
for r in old_children:
new_children |= (set(r.children.all()) - all_roles)
for c in r.children.all():
graph[r.id].add(c.id)
all_roles |= new_children
print("digraph G {")
for r in sorted(all_roles, key=lambda x: x.id):
if r.content_type is None:
print(f' {r.id} [shape=box,label="id={r.id}\lsingleton={r.singleton_name}\l"]')
else:
print(f' {r.id} [shape=box,label="id={r.id}\lct={r.content_type}\lobject_id={r.object_id}\lrole_field={r.role_field}\l"]')
print()
for p_id, children in sorted(graph.items()):
for c_id in children:
print(f" {p_id} -> {c_id}")
print("}")