Fix DoesNotExist error when running PolicyEngine against None user
This commit is contained in:
parent
c394066d99
commit
7529b51358
|
@ -12,6 +12,8 @@ LOGGER = getLogger(__name__)
|
||||||
@CELERY_APP.task()
|
@CELERY_APP.task()
|
||||||
def _policy_engine_task(user_pk, policy_pk, **kwargs):
|
def _policy_engine_task(user_pk, policy_pk, **kwargs):
|
||||||
"""Task wrapper to run policy checking"""
|
"""Task wrapper to run policy checking"""
|
||||||
|
if not user_pk:
|
||||||
|
raise ValueError()
|
||||||
policy_obj = Policy.objects.filter(pk=policy_pk).select_subclasses().first()
|
policy_obj = Policy.objects.filter(pk=policy_pk).select_subclasses().first()
|
||||||
user_obj = User.objects.get(pk=user_pk)
|
user_obj = User.objects.get(pk=user_pk)
|
||||||
for key, value in kwargs.items():
|
for key, value in kwargs.items():
|
||||||
|
@ -73,7 +75,12 @@ class PolicyEngine:
|
||||||
def result(self):
|
def result(self):
|
||||||
"""Get policy-checking result"""
|
"""Get policy-checking result"""
|
||||||
messages = []
|
messages = []
|
||||||
for policy_action, policy_result, policy_message in self._group.get():
|
try:
|
||||||
|
# ValueError can be thrown from _policy_engine_task when user is None
|
||||||
|
group_result = self._group.get()
|
||||||
|
except ValueError as exc:
|
||||||
|
return False, str(exc)
|
||||||
|
for policy_action, policy_result, policy_message in group_result:
|
||||||
passing = (policy_action == Policy.ACTION_ALLOW and policy_result) or \
|
passing = (policy_action == Policy.ACTION_ALLOW and policy_result) or \
|
||||||
(policy_action == Policy.ACTION_DENY and not policy_result)
|
(policy_action == Policy.ACTION_DENY and not policy_result)
|
||||||
LOGGER.debug('Action=%s, Result=%r => %r', policy_action, policy_result, passing)
|
LOGGER.debug('Action=%s, Result=%r => %r', policy_action, policy_result, passing)
|
||||||
|
|
Reference in a new issue