mirror of
https://github.com/ansible/awx.git
synced 2026-03-02 01:08:48 -03:30
Merge pull request #3985 from AlanCoding/auditor_optimization
System auditor optimization via cache
This commit is contained in:
@@ -74,7 +74,9 @@ User.add_to_class('auditor_of_organizations', user_get_auditor_of_organizations)
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def user_is_system_auditor(user):
|
def user_is_system_auditor(user):
|
||||||
return Role.singleton('system_auditor').members.filter(id=user.id).exists()
|
if not hasattr(user, '_is_system_auditor'):
|
||||||
|
user._is_system_auditor = Role.objects.filter(role_field='system_auditor', id=user.id).exists()
|
||||||
|
return user._is_system_auditor
|
||||||
|
|
||||||
|
|
||||||
@user_is_system_auditor.setter
|
@user_is_system_auditor.setter
|
||||||
@@ -82,8 +84,10 @@ def user_is_system_auditor(user, tf):
|
|||||||
if user.id:
|
if user.id:
|
||||||
if tf:
|
if tf:
|
||||||
Role.singleton('system_auditor').members.add(user)
|
Role.singleton('system_auditor').members.add(user)
|
||||||
|
user._is_system_auditor = True
|
||||||
else:
|
else:
|
||||||
Role.singleton('system_auditor').members.remove(user)
|
Role.singleton('system_auditor').members.remove(user)
|
||||||
|
user._is_system_auditor = False
|
||||||
|
|
||||||
|
|
||||||
User.add_to_class('is_system_auditor', user_is_system_auditor)
|
User.add_to_class('is_system_auditor', user_is_system_auditor)
|
||||||
|
|||||||
@@ -1,11 +1,45 @@
|
|||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
from django.contrib.auth.models import User
|
from django.test import TransactionTestCase
|
||||||
|
|
||||||
from awx.main.migrations import _rbac as rbac
|
from awx.main.migrations import _rbac as rbac
|
||||||
from awx.main.access import UserAccess
|
from awx.main.access import UserAccess
|
||||||
from awx.main.models import Role
|
from awx.main.models import Role, User, Organization, Inventory
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.django_db
|
||||||
|
class TestSysAuditor(TransactionTestCase):
|
||||||
|
def rando(self):
|
||||||
|
return User.objects.create(username='rando', password='rando', email='rando@com.com')
|
||||||
|
|
||||||
|
def inventory(self):
|
||||||
|
org = Organization.objects.create(name='org')
|
||||||
|
inv = Inventory.objects.create(name='inv', organization=org)
|
||||||
|
return inv
|
||||||
|
|
||||||
|
def test_auditor_caching(self):
|
||||||
|
rando = self.rando()
|
||||||
|
with self.assertNumQueries(1):
|
||||||
|
v = rando.is_system_auditor
|
||||||
|
assert not v
|
||||||
|
with self.assertNumQueries(0):
|
||||||
|
v = rando.is_system_auditor
|
||||||
|
assert not v
|
||||||
|
|
||||||
|
def test_auditor_setter(self):
|
||||||
|
rando = self.rando()
|
||||||
|
inventory = self.inventory()
|
||||||
|
rando.is_system_auditor = True
|
||||||
|
assert rando in inventory.read_role
|
||||||
|
|
||||||
|
def test_refresh_with_set(self):
|
||||||
|
rando = self.rando()
|
||||||
|
rando.is_system_auditor = True
|
||||||
|
assert rando.is_system_auditor
|
||||||
|
rando.is_system_auditor = False
|
||||||
|
assert not rando.is_system_auditor
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
|
|||||||
Reference in New Issue
Block a user