summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/narr/security.rst12
-rw-r--r--src/pyramid/interfaces.py2
-rw-r--r--src/pyramid/security.py6
-rw-r--r--src/pyramid/testing.py2
-rw-r--r--src/pyramid/viewderivers.py9
-rw-r--r--tests/pkgs/securityapp/__init__.py4
-rw-r--r--tests/test_config/test_views.py6
-rw-r--r--tests/test_security.py7
-rw-r--r--tests/test_testing.py2
-rw-r--r--tests/test_viewderivers.py2
10 files changed, 23 insertions, 29 deletions
diff --git a/docs/narr/security.rst b/docs/narr/security.rst
index aac9eeb7b..cdc16b6a1 100644
--- a/docs/narr/security.rst
+++ b/docs/narr/security.rst
@@ -80,8 +80,9 @@ A simple security policy might look like the following:
""" Return a string ID for the user. """
return self.identify(request).id
- def permits(self, request, context, identity, permission):
+ def permits(self, request, context, permission):
""" Allow access to everything if signed in. """
+ identity = self.identify(request)
if identity is not None:
return Allowed('User is signed in.')
else:
@@ -147,8 +148,9 @@ For example, our above security policy can leverage these helpers like so:
def authenticated_userid(self, request):
return self.identify(request).id
- def permits(self, request, context, identity, permission):
+ def permits(self, request, context, permission):
""" Allow access to everything if signed in. """
+ identity = self.identify(request)
if identity is not None:
return Allowed('User is signed in.')
else:
@@ -236,7 +238,9 @@ might look like so:
from pyramid.security import Allowed, Denied
class SecurityPolicy:
- def permits(self, request, context, identity, permission):
+ def permits(self, request, context, permission):
+ identity = self.identify(request)
+
if identity is None:
return Denied('User is not signed in.')
if identity.role == 'admin':
@@ -326,7 +330,7 @@ object. An implementation might look like this:
from pyramid.authorization import ACLHelper
class SecurityPolicy:
- def permits(self, request, context, identity, permission):
+ def permits(self, request, context, permission):
principals = [Everyone]
if identity is not None:
principals.append(Authenticated)
diff --git a/src/pyramid/interfaces.py b/src/pyramid/interfaces.py
index d20401028..891b851ee 100644
--- a/src/pyramid/interfaces.py
+++ b/src/pyramid/interfaces.py
@@ -494,7 +494,7 @@ class ISecurityPolicy(Interface):
verified user, or ``None`` if unauthenticated.
"""
- def permits(request, context, identity, permission):
+ def permits(request, context, permission):
""" Return an instance of :class:`pyramid.security.Allowed` if a user
of the given identity is allowed the ``permission`` in the current
``context``, else return an instance of
diff --git a/src/pyramid/security.py b/src/pyramid/security.py
index d6af69e51..e3a978c52 100644
--- a/src/pyramid/security.py
+++ b/src/pyramid/security.py
@@ -351,9 +351,7 @@ class SecurityAPIMixin:
policy = _get_security_policy(self)
if policy is None:
return Allowed('No security policy in use.')
- return policy.permits(
- self, context, self.authenticated_identity, permission
- )
+ return policy.permits(self, context, permission)
class AuthenticationAPIMixin(object):
@@ -449,7 +447,7 @@ class LegacySecurityPolicy:
authn = self._get_authn_policy(request)
return authn.forget(request)
- def permits(self, request, context, identity, permission):
+ def permits(self, request, context, permission):
authn = self._get_authn_policy(request)
authz = self._get_authz_policy(request)
principals = authn.effective_principals(request)
diff --git a/src/pyramid/testing.py b/src/pyramid/testing.py
index f550156dd..a92bb5d03 100644
--- a/src/pyramid/testing.py
+++ b/src/pyramid/testing.py
@@ -64,7 +64,7 @@ class DummySecurityPolicy(object):
def authenticated_userid(self, request):
return self.userid
- def permits(self, request, context, identity, permission):
+ def permits(self, request, context, permission):
return self.permissive
def remember(self, request, userid, **kw):
diff --git a/src/pyramid/viewderivers.py b/src/pyramid/viewderivers.py
index 35f9a08d2..7c28cbf85 100644
--- a/src/pyramid/viewderivers.py
+++ b/src/pyramid/viewderivers.py
@@ -316,8 +316,7 @@ def _secured_view(view, info):
if policy and (permission is not None):
def permitted(context, request):
- identity = policy.identify(request)
- return policy.permits(request, context, identity, permission)
+ return policy.permits(request, context, permission)
def secured_view(context, request):
result = permitted(context, request)
@@ -363,10 +362,8 @@ def _authdebug_view(view, info):
elif permission is None:
msg = 'Allowed (no permission registered)'
else:
- identity = policy.identify(request)
- msg = str(
- policy.permits(request, context, identity, permission)
- )
+ result = policy.permits(request, context, permission)
+ msg = str(result)
else:
msg = 'Allowed (no security policy in use)'
diff --git a/tests/pkgs/securityapp/__init__.py b/tests/pkgs/securityapp/__init__.py
index caf65ad4c..6c9025e7d 100644
--- a/tests/pkgs/securityapp/__init__.py
+++ b/tests/pkgs/securityapp/__init__.py
@@ -4,12 +4,12 @@ from pyramid.security import Allowed, Denied
class SecurityPolicy:
def identify(self, request):
- return self.authenticated_userid(request)
+ raise NotImplementedError() # pragma: no cover
def authenticated_userid(self, request):
return request.environ.get('REMOTE_USER')
- def permits(self, request, context, identity, permission):
+ def permits(self, request, context, permission):
userid = self.authenticated_userid(request)
if userid and permission == 'foo':
return Allowed('')
diff --git a/tests/test_config/test_views.py b/tests/test_config/test_views.py
index a1e975756..a474d3754 100644
--- a/tests/test_config/test_views.py
+++ b/tests/test_config/test_views.py
@@ -2045,10 +2045,9 @@ class TestViewsConfigurationMixin(unittest.TestCase):
outerself.assertEqual(r, request)
return 123
- def permits(self, r, context, identity, permission):
+ def permits(self, r, context, permission):
outerself.assertEqual(r, request)
outerself.assertEqual(context, None)
- outerself.assertEqual(identity, 123)
outerself.assertEqual(permission, 'view')
return True
@@ -2070,10 +2069,9 @@ class TestViewsConfigurationMixin(unittest.TestCase):
outerself.assertEqual(r, request)
return 123
- def permits(self, r, context, identity, permission):
+ def permits(self, r, context, permission):
outerself.assertEqual(r, request)
outerself.assertEqual(context, None)
- outerself.assertEqual(identity, 123)
outerself.assertEqual(permission, 'view')
return True
diff --git a/tests/test_security.py b/tests/test_security.py
index a555fd7f6..f39e3c730 100644
--- a/tests/test_security.py
+++ b/tests/test_security.py
@@ -489,10 +489,7 @@ class TestLegacySecurityPolicy(unittest.TestCase):
_registerAuthenticationPolicy(request.registry, ['p1', 'p2'])
_registerAuthorizationPolicy(request.registry, True)
- self.assertIs(
- policy.permits(request, request.context, 'userid', 'permission'),
- True,
- )
+ self.assertTrue(policy.permits(request, request.context, 'permission'))
_TEST_HEADER = 'X-Pyramid-Test'
@@ -513,7 +510,7 @@ class DummySecurityPolicy:
def authenticated_userid(self, request):
return self.result
- def permits(self, request, context, identity, permission):
+ def permits(self, request, context, permission):
return self.result
def remember(self, request, userid, **kw):
diff --git a/tests/test_testing.py b/tests/test_testing.py
index 22bc7332b..be519cd15 100644
--- a/tests/test_testing.py
+++ b/tests/test_testing.py
@@ -37,7 +37,7 @@ class TestDummySecurityPolicy(unittest.TestCase):
def test_permits(self):
policy = self._makeOne()
- self.assertEqual(policy.permits(None, None, None, None), True)
+ self.assertTrue(policy.permits(None, None, None))
def test_forget(self):
policy = self._makeOne()
diff --git a/tests/test_viewderivers.py b/tests/test_viewderivers.py
index e47296b50..ba10eeaac 100644
--- a/tests/test_viewderivers.py
+++ b/tests/test_viewderivers.py
@@ -2086,7 +2086,7 @@ class DummySecurityPolicy:
def identify(self, request):
return 123
- def permits(self, request, context, identity, permission):
+ def permits(self, request, context, permission):
return self.permitted