Skip to content

Instantly share code, notes, and snippets.

@AlanCoding
Last active October 5, 2023 18:58
Show Gist options
  • Save AlanCoding/fef7801c46b140e80d60ca079434fe48 to your computer and use it in GitHub Desktop.
Save AlanCoding/fef7801c46b140e80d60ca079434fe48 to your computer and use it in GitHub Desktop.
system_administrator
instancegroup.admin_role
credential.admin_role
organization.admin_role
workflowjobtemplate.admin_role
project.admin_role
instancegroup.use_role
instancegroup.read_role
credential.use_role
credential.read_role
organization.execute_role
organization.project_admin_role
organization.inventory_admin_role
organization.credential_admin_role
organization.workflow_admin_role
organization.notification_admin_role
organization.job_template_admin_role
organization.execution_environment_admin_role
organization.member_role
organization.approval_role
team.admin_role
organization.read_role
workflowjobtemplate.execute_role
jobtemplate.execute_role
workflowjobtemplate.read_role
jobtemplate.read_role
project.use_role
project.update_role
project.read_role
inventory.admin_role
inventory.update_role
inventory.adhoc_role
inventory.read_role
inventory.use_role
workflowjobtemplate.approval_role
jobtemplate.admin_role
team.member_role
team.read_role
system_auditor
instancegroup.read_role
credential.read_role
organization.auditor_role
workflowjobtemplate.read_role
project.read_role
inventory.read_role
organization.read_role
team.read_role
jobtemplate.read_role
instancegroup.admin_role
instancegroup.use_role
instancegroup.read_role
instancegroup.use_role
instancegroup.read_role
instancegroup.read_role
inventory.admin_role
inventory.update_role
inventory.adhoc_role
inventory.read_role
inventory.use_role
inventory.update_role
inventory.read_role
inventory.adhoc_role
inventory.use_role
inventory.read_role
inventory.use_role
inventory.read_role
inventory.read_role
credential.admin_role
credential.use_role
credential.read_role
credential.use_role
credential.read_role
credential.read_role
organization.admin_role
organization.execute_role
organization.project_admin_role
organization.inventory_admin_role
organization.credential_admin_role
organization.workflow_admin_role
organization.notification_admin_role
organization.job_template_admin_role
organization.execution_environment_admin_role
organization.member_role
organization.approval_role
team.admin_role
organization.read_role
workflowjobtemplate.execute_role
jobtemplate.execute_role
workflowjobtemplate.read_role
jobtemplate.read_role
project.admin_role
project.use_role
project.update_role
project.read_role
inventory.admin_role
inventory.update_role
inventory.adhoc_role
inventory.read_role
inventory.use_role
credential.admin_role
credential.use_role
credential.read_role
workflowjobtemplate.admin_role
workflowjobtemplate.approval_role
jobtemplate.admin_role
team.member_role
team.read_role
organization.execute_role
organization.read_role
workflowjobtemplate.execute_role
jobtemplate.execute_role
workflowjobtemplate.read_role
jobtemplate.read_role
organization.project_admin_role
organization.read_role
project.admin_role
project.use_role
project.update_role
project.read_role
organization.inventory_admin_role
inventory.admin_role
organization.read_role
inventory.update_role
inventory.adhoc_role
inventory.read_role
inventory.use_role
organization.credential_admin_role
credential.admin_role
organization.read_role
credential.use_role
credential.read_role
organization.workflow_admin_role
organization.read_role
workflowjobtemplate.admin_role
workflowjobtemplate.execute_role
workflowjobtemplate.read_role
workflowjobtemplate.approval_role
organization.notification_admin_role
organization.read_role
organization.job_template_admin_role
organization.read_role
jobtemplate.admin_role
jobtemplate.execute_role
jobtemplate.read_role
organization.execution_environment_admin_role
organization.read_role
organization.auditor_role
inventory.read_role
credential.read_role
organization.read_role
workflowjobtemplate.read_role
team.read_role
jobtemplate.read_role
project.read_role
organization.member_role
organization.read_role
organization.read_role
organization.approval_role
organization.read_role
workflowjobtemplate.approval_role
workflowjobtemplate.read_role
workflowjobtemplate.admin_role
workflowjobtemplate.execute_role
workflowjobtemplate.read_role
workflowjobtemplate.approval_role
workflowjobtemplate.execute_role
workflowjobtemplate.read_role
workflowjobtemplate.read_role
workflowjobtemplate.approval_role
workflowjobtemplate.read_role
team.admin_role
team.member_role
team.read_role
team.member_role
team.read_role
team.read_role
jobtemplate.admin_role
jobtemplate.execute_role
jobtemplate.read_role
jobtemplate.execute_role
jobtemplate.read_role
jobtemplate.read_role
project.admin_role
project.use_role
project.update_role
project.read_role
project.use_role
project.read_role
project.update_role
project.read_role
project.read_role
import os
import sys
# Django
import django
base_dir = os.path.abspath( # Convert into absolute path string
os.path.join( # Current file's grandparent directory
os.path.dirname(os.path.abspath(__file__)),
os.pardir,
)
)
if base_dir not in sys.path:
sys.path.insert(1, base_dir)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "awx.settings.development") # noqa
django.setup() # noqa
from django.apps import apps
from awx.main.fields import ImplicitRoleField
def print_name(field):
"""For a field which is a role field, give a display name"""
if not hasattr(field, 'model'):
return field.name
return f'{field.model._meta.model_name}.{field.name}'
models = set(apps.get_app_config('main').get_models())
roles = {
# Note that these are not real fields, so they are created artifically
'singleton:system_administrator': ImplicitRoleField(name='system_administrator'),
'singleton:system_auditor': ImplicitRoleField(name='system_auditor')
}
for cls in models:
for f in cls._meta.get_fields():
if isinstance(f, ImplicitRoleField):
roles[print_name(f)] = f
for f in roles.values():
f.parents = {}
f.children = {}
for k, f in roles.copy().items():
if f.parent_role is not None:
if isinstance(f.parent_role, str):
parent_roles = [f.parent_role]
else:
parent_roles = f.parent_role
for rel_name in parent_roles:
if '.' in rel_name:
other_name = '.'.join(rel_name.split('.')[-2:])
other_field = roles[other_name]
elif ':' in rel_name:
other_field = roles[rel_name]
else:
other_field = roles[f'{f.model._meta.model_name}.{rel_name}']
if not isinstance(other_field, ImplicitRoleField):
raise Exception(f'field {other_field} is not a role field')
f.parents[print_name(other_field)] = other_field
# print(print_name(f))
# print(' ' + str(f.parents))
for k, f in roles.copy().items():
for parent_name, parent_field in f.parents.items():
parent_field.children[print_name(f)] = f
def get_descendents(f):
ret = f.children.copy()
for child_name, child_field in f.children.items():
additional = get_descendents(child_field)
ret.update(additional)
return ret
for k, f in roles.copy().items():
print()
print(print_name(f))
for child_name, child_field in get_descendents(f).items():
print(f' {child_name}')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment