mirror of
https://github.com/ansible/awx.git
synced 2026-03-28 22:35:08 -02:30
Merge pull request #1310 from anoek/rbac
Fixed up some missing select_related cases on RBAC
This commit is contained in:
@@ -553,6 +553,11 @@ class OrganizationList(ListCreateAPIView):
|
|||||||
model = Organization
|
model = Organization
|
||||||
serializer_class = OrganizationSerializer
|
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):
|
def create(self, request, *args, **kwargs):
|
||||||
"""Create a new organzation.
|
"""Create a new organzation.
|
||||||
|
|
||||||
@@ -766,6 +771,11 @@ class TeamList(ListCreateAPIView):
|
|||||||
model = Team
|
model = Team
|
||||||
serializer_class = TeamSerializer
|
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):
|
class TeamDetail(RetrieveUpdateDestroyAPIView):
|
||||||
|
|
||||||
model = Team
|
model = Team
|
||||||
@@ -866,6 +876,17 @@ class ProjectList(ListCreateAPIView):
|
|||||||
model = Project
|
model = Project
|
||||||
serializer_class = ProjectSerializer
|
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):
|
def get(self, request, *args, **kwargs):
|
||||||
# Not optimal, but make sure the project status and last_updated fields
|
# Not optimal, but make sure the project status and last_updated fields
|
||||||
# are up to date here...
|
# are up to date here...
|
||||||
@@ -1248,6 +1269,11 @@ class InventoryList(ListCreateAPIView):
|
|||||||
model = Inventory
|
model = Inventory
|
||||||
serializer_class = InventorySerializer
|
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):
|
class InventoryDetail(RetrieveUpdateDestroyAPIView):
|
||||||
|
|
||||||
model = Inventory
|
model = Inventory
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
|
|
||||||
# Django
|
# Django
|
||||||
from django.db.models.signals import (
|
from django.db.models.signals import (
|
||||||
post_init,
|
|
||||||
pre_save,
|
pre_save,
|
||||||
post_save,
|
post_save,
|
||||||
post_delete,
|
post_delete,
|
||||||
@@ -105,7 +104,6 @@ class ImplicitRoleField(models.ForeignKey):
|
|||||||
setattr(cls, '__implicit_role_fields', [])
|
setattr(cls, '__implicit_role_fields', [])
|
||||||
getattr(cls, '__implicit_role_fields').append(self)
|
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')
|
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_save.connect(self._post_save, cls, True, dispatch_uid='implicit-role-post-save')
|
||||||
post_delete.connect(self._post_delete, cls, True)
|
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))
|
getattr(instance, self.name).parents.remove(getattr(obj, field_attr))
|
||||||
return _m2m_update
|
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):
|
def _create_role_instance_if_not_exists(self, instance):
|
||||||
role = getattr(instance, self.name, None)
|
role = getattr(instance, self.name, None)
|
||||||
if role:
|
if role:
|
||||||
@@ -213,6 +202,15 @@ class ImplicitRoleField(models.ForeignKey):
|
|||||||
for implicit_role_field in getattr(instance.__class__, '__implicit_role_fields'):
|
for implicit_role_field in getattr(instance.__class__, '__implicit_role_fields'):
|
||||||
implicit_role_field._create_role_instance_if_not_exists(instance)
|
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):
|
def _post_save(self, instance, created, *args, **kwargs):
|
||||||
if created:
|
if created:
|
||||||
for implicit_role_field in getattr(instance.__class__, '__implicit_role_fields'):
|
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.write('\r %d ' % (ids['credential']))
|
||||||
sys.stdout.flush()
|
sys.stdout.flush()
|
||||||
credential_id = ids['credential']
|
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)
|
credentials.append(credential)
|
||||||
user_idx += 1
|
user_idx += 1
|
||||||
print('')
|
print('')
|
||||||
@@ -187,7 +188,8 @@ class Command(BaseCommand):
|
|||||||
sys.stdout.write('\r %d ' % (ids['credential'] - starting_credential_id))
|
sys.stdout.write('\r %d ' % (ids['credential'] - starting_credential_id))
|
||||||
sys.stdout.flush()
|
sys.stdout.flush()
|
||||||
credential_id = ids['credential']
|
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)
|
credentials.append(credential)
|
||||||
team_idx += 1
|
team_idx += 1
|
||||||
print('')
|
print('')
|
||||||
|
|||||||
Reference in New Issue
Block a user