[Checkins] SVN: Products.CMFCore/trunk/Products/CMFCore/ - added FakeExecutableObject

Yvo Schubbe y.2010 at wcm-solutions.de
Thu Sep 30 07:04:05 EDT 2010


Log message for revision 117083:
  - added FakeExecutableObject
  (Charlie wants to use this in CMF; taken from https://mail.zope.org/pipermail/zope/2005-November/162956.html)

Changed:
  U   Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt
  U   Products.CMFCore/trunk/Products/CMFCore/tests/test_utils.py
  U   Products.CMFCore/trunk/Products/CMFCore/utils.py

-=-
Modified: Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt	2010-09-30 10:17:16 UTC (rev 117082)
+++ Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt	2010-09-30 11:04:05 UTC (rev 117083)
@@ -4,6 +4,9 @@
 2.3.0-alpha (unreleased)
 ------------------------
 
+- utils: Added FakeExecutableObject.
+  It can be used to set proxy roles in trusted code.
+
 - tests base: Removed obsolete test utils.
 
 - testing: Removed broken run function.

Modified: Products.CMFCore/trunk/Products/CMFCore/tests/test_utils.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/test_utils.py	2010-09-30 10:17:16 UTC (rev 117082)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/test_utils.py	2010-09-30 11:04:05 UTC (rev 117083)
@@ -164,7 +164,32 @@
         # The values on the object itself should still the the same
         self.assertEqual(len(obj.get_local_roles_for_userid('dummyuser1')), 2)
 
+    def test_FakeExecutableObject(self):
+        from AccessControl import getSecurityManager
+        from AccessControl.ImplPython import ZopeSecurityPolicy
+        from AccessControl.Permission import Permission
+        from AccessControl.SecurityManagement import newSecurityManager
+        from AccessControl.SecurityManager import setSecurityPolicy
+        from Products.CMFCore.utils import FakeExecutableObject
 
+        setSecurityPolicy(ZopeSecurityPolicy())
+        site = self._makeSite()
+        newSecurityManager(None, site.acl_users.user_foo)
+        obj = site.bar_dummy
+        Permission('FOO', (), obj).setRoles(('FOO_ROLE',))
+        sm = getSecurityManager()
+        self.assertFalse(sm.checkPermission('FOO', obj))
+
+        eo = FakeExecutableObject(('FOO_ROLE',))
+        sm.addContext(eo)
+        try:
+            self.assertTrue(sm.checkPermission('FOO', obj))
+        finally:
+            sm.removeContext(eo)
+
+        self.assertFalse(sm.checkPermission('FOO', obj))
+
+
 def test_suite():
     return unittest.TestSuite((
         unittest.makeSuite(CoreUtilsTests),

Modified: Products.CMFCore/trunk/Products/CMFCore/utils.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/utils.py	2010-09-30 10:17:16 UTC (rev 117082)
+++ Products.CMFCore/trunk/Products/CMFCore/utils.py	2010-09-30 11:04:05 UTC (rev 117083)
@@ -284,6 +284,20 @@
     return something_changed
 
 
+class FakeExecutableObject:
+
+    """Fake ExecutableObject used to set proxy roles in trusted code.
+    """
+
+    def __init__(self, proxy_roles):
+        self._proxy_roles = tuple(proxy_roles)
+
+    def getOwner(self):
+        return None
+
+    getWrappedOwner = getOwner
+
+
 # Parse a string of etags from an If-None-Match header
 # Code follows ZPublisher.HTTPRequest.parse_cookie
 parse_etags_lock=allocate_lock()



More information about the checkins mailing list