[Erp5-report] r21613 - in /erp5/trunk/products/CMFCategory: ./ tests/
nobody at svn.erp5.org
nobody at svn.erp5.org
Mon Jun 16 13:48:32 CEST 2008
Author: jerome
Date: Mon Jun 16 13:48:28 2008
New Revision: 21613
URL: http://svn.erp5.org?rev=21613&view=rev
Log:
Some categories can have different security, so getCategoryChildItemList cache
should take username into account when caching categories.
For optimisation, do this only when checked_permission is passed.
Modified:
erp5/trunk/products/CMFCategory/Category.py
erp5/trunk/products/CMFCategory/tests/testCMFCategory.py
Modified: erp5/trunk/products/CMFCategory/Category.py
URL: http://svn.erp5.org/erp5/trunk/products/CMFCategory/Category.py?rev=21613&r1=21612&r2=21613&view=diff
==============================================================================
--- erp5/trunk/products/CMFCategory/Category.py (original)
+++ erp5/trunk/products/CMFCategory/Category.py Mon Jun 16 13:48:28 2008
@@ -30,6 +30,7 @@
from Globals import InitializeClass, DTMLFile
from AccessControl import ClassSecurityInfo
+from AccessControl import getSecurityManager
from Acquisition import aq_base, aq_inner, aq_parent
from Products.CMFCore.utils import getToolByName
@@ -528,13 +529,20 @@
if not cache:
return _renderCategoryChildItemList(
recursive=recursive, base=base, **kw)
-
+
+ # If checked_permission is specified, we include the username in the
+ # cache key
+ username = None
+ if 'checked_permission' in kw:
+ username = str(getSecurityManager().getUser())
+
# Some methods are language dependent so we include the language in the
# key
localizer = getToolByName(self, 'Localizer')
language = localizer.get_selected_language()
m = CachingMethod(_renderCategoryChildItemList,
- ('Category_getCategoryChildItemList', language, self.getPath()),
+ ('Category_getCategoryChildItemList', language,
+ self.getPath(), username),
cache_factory=cache)
return m(recursive=recursive, base=base, **kw)
Modified: erp5/trunk/products/CMFCategory/tests/testCMFCategory.py
URL: http://svn.erp5.org/erp5/trunk/products/CMFCategory/tests/testCMFCategory.py?rev=21613&r1=21612&r2=21613&view=diff
==============================================================================
--- erp5/trunk/products/CMFCategory/tests/testCMFCategory.py (original)
+++ erp5/trunk/products/CMFCategory/tests/testCMFCategory.py Mon Jun 16 13:48:28 2008
@@ -30,6 +30,7 @@
from Testing import ZopeTestCase
from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
+from Testing.ZopeTestCase.PortalTestCase import PortalTestCase
from AccessControl.SecurityManagement import newSecurityManager
from AccessControl.SecurityManagement import noSecurityManager
from Products.ERP5Type.Base import _aq_reset
@@ -1043,6 +1044,35 @@
bc.getCategoryChildTitleItemList(checked_permission=checked_permission,
cache=0))
+ def test_28b_getCategoryChildItemList_checked_permission_cache(self):
+ # getCategoryChildTitleItemList take into account user
+ pc = self.getCategoriesTool()
+
+ bc_id = 'barfoo'
+ bc = pc.newContent(portal_type='Base Category', id=bc_id)
+ a = bc.newContent(portal_type='Category', id='1', title='A')
+ b = bc.newContent(portal_type='Category', id='2', title='B')
+ b1 = b.newContent(portal_type='Category', id='21', title='B1')
+
+ uf = self.getPortal().acl_users
+ uf._doAddUser('alice', '', ['Member', 'Manager', 'Assignor'], [])
+ uf._doAddUser('bob', '', ['Member'], [])
+ login = PortalTestCase.login
+
+ checked_permission = 'View'
+
+ b.manage_permission(checked_permission, roles=['Assignor'], acquire=0)
+ login(self, 'alice')
+ self.assertEquals(
+ [['', ''], ['A', '1'], ['B', '2'], ['B1', '2/21']],
+ bc.getCategoryChildTitleItemList(checked_permission=checked_permission,))
+
+ login(self, 'bob')
+ self.assertEquals(
+ [['', ''], ['A', '1']],
+ bc.getCategoryChildTitleItemList(checked_permission=checked_permission,))
+
+
def test_29_renameBaseCategory(self):
bc = self.portal.portal_categories.newContent(
portal_type='Base Category',
More information about the Erp5-report
mailing list