mirror of
https://github.com/ansible/awx.git
synced 2026-02-22 13:36:02 -03:30
60 lines
1.8 KiB
Python
60 lines
1.8 KiB
Python
import logging
|
|
from time import time
|
|
|
|
from awx.main.models.rbac import Role, batch_role_ancestor_rebuilding
|
|
|
|
logger = logging.getLogger('rbac_migrations')
|
|
|
|
|
|
def create_roles(apps, schema_editor):
|
|
'''
|
|
Implicit role creation happens in our post_save hook for all of our
|
|
resources. Here we iterate through all of our resource types and call
|
|
.save() to ensure all that happens for every object in the system before we
|
|
get busy with the actual migration work.
|
|
|
|
This gets run after migrate_users, which does role creation for users a
|
|
little differently.
|
|
'''
|
|
|
|
models = [
|
|
apps.get_model('main', m) for m in [
|
|
'Organization',
|
|
'Team',
|
|
'Inventory',
|
|
'Project',
|
|
'Credential',
|
|
'CustomInventoryScript',
|
|
'JobTemplate',
|
|
]
|
|
]
|
|
|
|
with batch_role_ancestor_rebuilding():
|
|
for model in models:
|
|
for obj in model.objects.iterator():
|
|
obj.save()
|
|
|
|
|
|
def rebuild_role_hierarchy(apps, schema_editor):
|
|
logger.info('Computing role roots..')
|
|
start = time()
|
|
roots = Role.objects \
|
|
.all() \
|
|
.values_list('id', flat=True)
|
|
stop = time()
|
|
logger.info('Found %d roots in %f seconds, rebuilding ancestry map' % (len(roots), stop - start))
|
|
start = time()
|
|
Role.rebuild_role_ancestor_list(roots, [])
|
|
stop = time()
|
|
logger.info('Rebuild completed in %f seconds' % (stop - start))
|
|
logger.info('Done.')
|
|
|
|
|
|
def delete_all_user_roles(apps, schema_editor):
|
|
ContentType = apps.get_model('contenttypes', "ContentType")
|
|
Role = apps.get_model('main', "Role")
|
|
User = apps.get_model('auth', "User")
|
|
user_content_type = ContentType.objects.get_for_model(User)
|
|
for role in Role.objects.filter(content_type=user_content_type).iterator():
|
|
role.delete()
|