Issue #8187
Updated by pulpbot over 2 years ago
**Ticket moved to GitHub**: "pulp/pulpcore/1964":https://github.com/pulp/pulpcore/issues/1964 ---- If the condition contains a boolean expression like below, and even though `has_repo_attr_model_or_obj_perms` is defined in global checks, it fails. ~~~ { "action": ["destroy"], "principal": "authenticated", "effect": "allow", "condition": [ "(has_repo_attr_model_or_obj_perms:container.delete_containerrepository_versions or" " has_repo_attr_model_or_obj_perms:container.view_containerrepository)", ] } ~~~ ~~~ Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: pulp [8f28125057bf41f1b157a7cb47848fca]: django.request:ERROR: Internal Server Error: /pulp/api/v3/repositories/container/container/46e44a17-dd48-4918-aa99-e54b6ea56b8d/versions/2/ Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: Traceback (most recent call last): Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: File "/usr/local/lib/pulp/lib64/python3.8/site-packages/django/core/handlers/exception.py", line 34, in inner Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: response = get_response(request) Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: File "/usr/local/lib/pulp/lib64/python3.8/site-packages/django/core/handlers/base.py", line 115, in _get_response Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: response = self.process_exception_by_middleware(e, request) Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: File "/usr/local/lib/pulp/lib64/python3.8/site-packages/django/core/handlers/base.py", line 113, in _get_response Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: response = wrapped_callback(request, *callback_args, **callback_kwargs) Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: File "/usr/local/lib/pulp/lib64/python3.8/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: return view_func(*args, **kwargs) Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: File "/usr/local/lib/pulp/lib64/python3.8/site-packages/rest_framework/viewsets.py", line 125, in view Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: return self.dispatch(request, *args, **kwargs) Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: File "/usr/local/lib/pulp/lib64/python3.8/site-packages/rest_framework/views.py", line 509, in dispatch Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: response = self.handle_exception(exc) Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: File "/usr/local/lib/pulp/lib64/python3.8/site-packages/rest_framework/views.py", line 469, in handle_exception Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: self.raise_uncaught_exception(exc) Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: File "/usr/local/lib/pulp/lib64/python3.8/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: raise exc Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: File "/usr/local/lib/pulp/lib64/python3.8/site-packages/rest_framework/views.py", line 497, in dispatch Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: self.initial(request, *args, **kwargs) Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: File "/home/vagrant/devel/pulpcore/pulpcore/app/viewsets/base.py", line 301, in initial Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: super().initial(request, *args, **kwargs) Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: File "/usr/local/lib/pulp/lib64/python3.8/site-packages/rest_framework/views.py", line 415, in initial Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: self.check_permissions(request) Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: File "/usr/local/lib/pulp/lib64/python3.8/site-packages/rest_framework/views.py", line 332, in check_permissions Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: if not permission.has_permission(request, self): Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: File "/usr/local/lib/pulp/lib64/python3.8/site-packages/rest_access_policy/access_policy.py", line 23, in has_permission Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: return self._evaluate_statements(statements, request, view, action) Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: File "/usr/local/lib/pulp/lib64/python3.8/site-packages/rest_access_policy/access_policy.py", line 59, in _evaluate_statements Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: matched = self._get_statements_matching_context_conditions( Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: File "/usr/local/lib/pulp/lib64/python3.8/site-packages/rest_access_policy/access_policy.py", line 160, in _get_statements_matching_context_conditions Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: passed = self._check_condition(condition, request, view, action) Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: File "/usr/local/lib/pulp/lib64/python3.8/site-packages/rest_access_policy/access_policy.py", line 181, in _check_condition Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: method = self._get_condition_method(method_name) Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: File "/usr/local/lib/pulp/lib64/python3.8/site-packages/rest_access_policy/access_policy.py", line 209, in _get_condition_method Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: raise AccessPolicyException( Feb 01 19:17:34 pulp3-source-fedora32.rhgoose.example.com gunicorn[132380]: rest_access_policy.exceptions.AccessPolicyException: condition '(has_repo_attr_model_or_obj_perms' must be a method on the access policy or be defined in the 'reusable_conditions' module ~~~ The workaround is to split it into 2 policy statements: ~~~ { "action": ["destroy"], "principal": "authenticated", "effect": "allow", "condition": [ "has_repo_attr_model_or_obj_perms:container.delete_containerrepository_versions", ] }, { "action": ["destroy"], "principal": "authenticated", "effect": "allow", "condition": [ "has_repo_attr_model_or_obj_perms:container.delete_containerrepository", ] }, ~~~