Last active
October 5, 2023 18:58
-
-
Save AlanCoding/fef7801c46b140e80d60ca079434fe48 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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