mirror of
https://github.com/ansible/awx.git
synced 2026-01-13 02:50:02 -03:30
Merge pull request #1310 from anoek/rbac
Fixed up some missing select_related cases on RBAC
This commit is contained in:
commit
051ef4220e
@ -553,6 +553,11 @@ class OrganizationList(ListCreateAPIView):
|
||||
model = Organization
|
||||
serializer_class = OrganizationSerializer
|
||||
|
||||
def get_queryset(self):
|
||||
qs = Organization.accessible_objects(self.request.user, {'read': True})
|
||||
qs = qs.select_related('admin_role', 'auditor_role', 'member_role')
|
||||
return qs
|
||||
|
||||
def create(self, request, *args, **kwargs):
|
||||
"""Create a new organzation.
|
||||
|
||||
@ -766,6 +771,11 @@ class TeamList(ListCreateAPIView):
|
||||
model = Team
|
||||
serializer_class = TeamSerializer
|
||||
|
||||
def get_queryset(self):
|
||||
qs = Team.accessible_objects(self.request.user, {'read': True})
|
||||
qs = qs.select_related('admin_role', 'auditor_role', 'member_role')
|
||||
return qs
|
||||
|
||||
class TeamDetail(RetrieveUpdateDestroyAPIView):
|
||||
|
||||
model = Team
|
||||
@ -866,6 +876,17 @@ class ProjectList(ListCreateAPIView):
|
||||
model = Project
|
||||
serializer_class = ProjectSerializer
|
||||
|
||||
def get_queryset(self):
|
||||
projects_qs = Project.accessible_objects(self.request.user, {'read': True})
|
||||
projects_qs = projects_qs.select_related(
|
||||
'organization',
|
||||
'admin_role',
|
||||
'auditor_role',
|
||||
'member_role',
|
||||
'scm_update_role',
|
||||
)
|
||||
return projects_qs
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
# Not optimal, but make sure the project status and last_updated fields
|
||||
# are up to date here...
|
||||
@ -1248,6 +1269,11 @@ class InventoryList(ListCreateAPIView):
|
||||
model = Inventory
|
||||
serializer_class = InventorySerializer
|
||||
|
||||
def get_queryset(self):
|
||||
qs = Inventory.accessible_objects(self.request.user, {'read': True})
|
||||
qs = qs.select_related('admin_role', 'auditor_role', 'updater_role', 'executor_role')
|
||||
return qs
|
||||
|
||||
class InventoryDetail(RetrieveUpdateDestroyAPIView):
|
||||
|
||||
model = Inventory
|
||||
|
||||
@ -3,7 +3,6 @@
|
||||
|
||||
# Django
|
||||
from django.db.models.signals import (
|
||||
post_init,
|
||||
pre_save,
|
||||
post_save,
|
||||
post_delete,
|
||||
@ -105,7 +104,6 @@ class ImplicitRoleField(models.ForeignKey):
|
||||
setattr(cls, '__implicit_role_fields', [])
|
||||
getattr(cls, '__implicit_role_fields').append(self)
|
||||
|
||||
post_init.connect(self._post_init, cls, True, dispatch_uid='implicit-role-post-init')
|
||||
pre_save.connect(self._pre_save, cls, True, dispatch_uid='implicit-role-pre-save')
|
||||
post_save.connect(self._post_save, cls, True, dispatch_uid='implicit-role-post-save')
|
||||
post_delete.connect(self._post_delete, cls, True)
|
||||
@ -163,15 +161,6 @@ class ImplicitRoleField(models.ForeignKey):
|
||||
getattr(instance, self.name).parents.remove(getattr(obj, field_attr))
|
||||
return _m2m_update
|
||||
|
||||
|
||||
def _post_init(self, instance, *args, **kwargs):
|
||||
original_parent_roles = dict()
|
||||
if instance.pk:
|
||||
for implicit_role_field in getattr(instance.__class__, '__implicit_role_fields'):
|
||||
original_parent_roles[implicit_role_field.name] = implicit_role_field._resolve_parent_roles(instance)
|
||||
|
||||
setattr(instance, '__original_parent_roles', original_parent_roles)
|
||||
|
||||
def _create_role_instance_if_not_exists(self, instance):
|
||||
role = getattr(instance, self.name, None)
|
||||
if role:
|
||||
@ -213,6 +202,15 @@ class ImplicitRoleField(models.ForeignKey):
|
||||
for implicit_role_field in getattr(instance.__class__, '__implicit_role_fields'):
|
||||
implicit_role_field._create_role_instance_if_not_exists(instance)
|
||||
|
||||
original_parent_roles = dict()
|
||||
if instance.pk:
|
||||
original = instance.__class__.objects.get(pk=instance.pk)
|
||||
for implicit_role_field in getattr(instance.__class__, '__implicit_role_fields'):
|
||||
original_parent_roles[implicit_role_field.name] = implicit_role_field._resolve_parent_roles(original)
|
||||
|
||||
setattr(instance, '__original_parent_roles', original_parent_roles)
|
||||
|
||||
|
||||
def _post_save(self, instance, created, *args, **kwargs):
|
||||
if created:
|
||||
for implicit_role_field in getattr(instance.__class__, '__implicit_role_fields'):
|
||||
|
||||
@ -172,7 +172,8 @@ class Command(BaseCommand):
|
||||
sys.stdout.write('\r %d ' % (ids['credential']))
|
||||
sys.stdout.flush()
|
||||
credential_id = ids['credential']
|
||||
credential = Credential.objects.create(name='%s Credential %d User %d' % (prefix, credential_id, user_idx), user=user)
|
||||
credential = Credential.objects.create(name='%s Credential %d User %d' % (prefix, credential_id, user_idx))
|
||||
credential.owner_role.members.add(user)
|
||||
credentials.append(credential)
|
||||
user_idx += 1
|
||||
print('')
|
||||
@ -187,7 +188,8 @@ class Command(BaseCommand):
|
||||
sys.stdout.write('\r %d ' % (ids['credential'] - starting_credential_id))
|
||||
sys.stdout.flush()
|
||||
credential_id = ids['credential']
|
||||
credential = Credential.objects.create(name='%s Credential %d team %d' % (prefix, credential_id, team_idx), team=team)
|
||||
credential = Credential.objects.create(name='%s Credential %d team %d' % (prefix, credential_id, team_idx))
|
||||
credential.owner_role.parents.add(team.member_role)
|
||||
credentials.append(credential)
|
||||
team_idx += 1
|
||||
print('')
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user