[Checkins] SVN: AccessControl/trunk/src/AccessControl/ decorators for public, private, protected
Florian Friesdorf
flo at chaoflow.net
Thu Nov 17 03:25:09 UTC 2011
Log message for revision 123398:
decorators for public, private, protected
Changed:
U AccessControl/trunk/src/AccessControl/SecurityInfo.py
U AccessControl/trunk/src/AccessControl/tests/testClassSecurityInfo.py
-=-
Modified: AccessControl/trunk/src/AccessControl/SecurityInfo.py
===================================================================
--- AccessControl/trunk/src/AccessControl/SecurityInfo.py 2011-11-17 03:25:00 UTC (rev 123397)
+++ AccessControl/trunk/src/AccessControl/SecurityInfo.py 2011-11-17 03:25:08 UTC (rev 123398)
@@ -104,6 +104,26 @@
"""Declare the object to be associated with a permission."""
self._setaccess(('',), permission_name)
+ public__roles__=ACCESS_PRIVATE
+ def public(self, func):
+ """Decorate a function to be publicly accessible."""
+ self.declarePublic(self, func.__name__)
+ return func
+
+ private__roles__=ACCESS_PRIVATE
+ def private(self, func):
+ """Decorate a function to be inaccessible to restricted code."""
+ self.declarePrivate(self, func.__name__)
+ return func
+
+ protected__roles__=ACCESS_PRIVATE
+ def protected(self, permission_name):
+ """Return a decorator to associate a function with a permission."""
+ def decor(func):
+ self.declareProtected(permission_name, func.__name__)
+ return func
+ return decor
+
setPermissionDefault__roles__=ACCESS_PRIVATE
def setPermissionDefault(self, permission_name, roles):
"""Declare default roles for a permission"""
Modified: AccessControl/trunk/src/AccessControl/tests/testClassSecurityInfo.py
===================================================================
--- AccessControl/trunk/src/AccessControl/tests/testClassSecurityInfo.py 2011-11-17 03:25:00 UTC (rev 123397)
+++ AccessControl/trunk/src/AccessControl/tests/testClassSecurityInfo.py 2011-11-17 03:25:08 UTC (rev 123398)
@@ -62,6 +62,20 @@
def protected(self, REQUEST=None):
""" """
+ # same with decorators
+
+ @security.public
+ def public_new(self, REQUEST=None):
+ """ """
+
+ @security.private
+ def private_new(self, REQUEST=None):
+ """ """
+
+ @security.protected('Test permission')
+ def protected_new(self, REQUEST=None):
+ """ """
+
# Do class initialization.
InitializeClass(Test)
@@ -78,6 +92,21 @@
for item in ('Manager', 'Role A', 'Role B', 'Role C'):
self.failUnless(item in imPermissionRole)
+ # functions exist, i.e. decorators returned them
+ self.assertEqual(object.public_new.__name__, 'public_new')
+ self.assertEqual(object.private_new.__name__, 'private_new')
+ self.assertEqual(object.protected_new.__name__, 'protected_new')
+
+ # roles for functions have been set via decorators
+ self.assertEqual(object.public_new__roles__, None)
+ self.assertEqual(object.private_new__roles__, ())
+ imPermissionRole = [r for r in object.protected_new__roles__
+ if not r.endswith('_Permission')]
+ self.failUnless(len(imPermissionRole) == 4)
+
+ for item in ('Manager', 'Role A', 'Role B', 'Role C'):
+ self.failUnless(item in imPermissionRole)
+
# Make sure that a permission defined without accompanying method
# is still reflected in __ac_permissions__
self.assertEquals([t for t in Test.__ac_permissions__ if not t[1]],
More information about the checkins
mailing list