[Checkins] SVN: Products.CMFCore/trunk/Products/CMFCore/ - PortalFolder: Ensure that pasting an object into a folder takes
Jens Vagelpohl
jens at dataflake.org
Sun Nov 8 06:40:38 EST 2009
Log message for revision 105533:
- PortalFolder: Ensure that pasting an object into a folder takes
workflow instance creation conditions into account.
(https://bugs.launchpad.net/zope-cmf/+bug/308947)
Changed:
U Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt
U Products.CMFCore/trunk/Products/CMFCore/PortalFolder.py
U Products.CMFCore/trunk/Products/CMFCore/tests/test_PortalFolder.py
-=-
Modified: Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt 2009-11-08 11:26:18 UTC (rev 105532)
+++ Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt 2009-11-08 11:40:38 UTC (rev 105533)
@@ -4,6 +4,10 @@
2.2.0 (unreleased)
------------------
+- PortalFolder: Ensure that pasting an object into a folder takes
+ workflow instance creation conditions into account.
+ (https://bugs.launchpad.net/zope-cmf/+bug/308947)
+
- Made calls to reindexObjectSecurity in the membership tool conditional
after the CMFCatalogAware refactoring.
Modified: Products.CMFCore/trunk/Products/CMFCore/PortalFolder.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/PortalFolder.py 2009-11-08 11:26:18 UTC (rev 105532)
+++ Products.CMFCore/trunk/Products/CMFCore/PortalFolder.py 2009-11-08 11:40:38 UTC (rev 105533)
@@ -423,6 +423,12 @@
raise ValueError('Disallowed subobject type: %s'
% type_name)
+ # Check for workflow guards
+ objType = pt.getTypeInfo(type_name)
+ if ( objType is not None and
+ not objType._checkWorkflowAllowed(self) ):
+ raise ValueError('Pasting not allowed in this workflow')
+
security.setPermissionDefault(AddPortalContent, ('Owner','Manager'))
security.declareProtected(AddPortalFolders, 'manage_addFolder')
Modified: Products.CMFCore/trunk/Products/CMFCore/tests/test_PortalFolder.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/test_PortalFolder.py 2009-11-08 11:26:18 UTC (rev 105532)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/test_PortalFolder.py 2009-11-08 11:40:38 UTC (rev 105533)
@@ -375,7 +375,46 @@
# Now copy/paste should raise a ValueError
cookie = sub1.manage_copyObjects( ids = ( 'dummy', ) )
self.assertRaises( ValueError, sub2.manage_pasteObjects, cookie )
+
+ def test_contentPasteFollowsWorkflowGuards(self):
+ #
+ # Copy/Paste should obey workflow guards
+ #
+ ttool = self.site._setObject( 'portal_types', TypesTool() )
+ fti = FTIDATA_DUMMY[0].copy()
+ ttool._setObject( 'Dummy Content', FTI(**fti) )
+ ttool._setObject( 'Folder', FTI(**fti) )
+ folder = self._makeOne('folder', 'Folder')
+ content = self._makeOne('content')
+ folder._setObject('content', content)
+ # Allow adding of Dummy Content
+ ttool.Folder.manage_changeProperties(filter_content_types=False)
+
+ # Copy/paste verification should work fine
+ folder._verifyObjectPaste( content )
+
+ # Add a workflow with a blocking guard
+ # Based on TypesTools tests
+ class DummyWorkflow:
+
+ _allow = False
+
+ def allowCreate(self, container, type_id):
+ return self._allow
+
+ class DummyWorkflowTool:
+
+ def __init__(self):
+ self._workflows = [DummyWorkflow()]
+
+ def getWorkflowsFor(self, type_id):
+ return self._workflows
+
+ # Now copy/paste verification should raise a ValueError
+ self.site.portal_workflow = DummyWorkflowTool()
+ self.assertRaises( ValueError, folder._verifyObjectPaste, content )
+
def test_setObjectRaisesBadRequest(self):
#
# _setObject() should raise BadRequest on duplicate id
More information about the checkins
mailing list