Commit 3a5021ce authored by Jérome Perrin's avatar Jérome Perrin

revert r15739, because it's slower.

Instead, cache this value when we have it in allowedRolesAndUsers, and use the cached value in getViewPermissionOwner



git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@16497 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent 20f3fe1b
...@@ -155,13 +155,18 @@ class IndexableObjectWrapper(CMFCoreIndexableObjectWrapper): ...@@ -155,13 +155,18 @@ class IndexableObjectWrapper(CMFCoreIndexableObjectWrapper):
# we may sometimes catalog the owner user ID whenever the Owner # we may sometimes catalog the owner user ID whenever the Owner
# has view permission (see getAllowedRolesAndUsers bellow # has view permission (see getAllowedRolesAndUsers bellow
# as well as getViewPermissionOwner method in Base) # as well as getViewPermissionOwner method in Base)
if role != 'Owner': if role != 'Owner':
if withnuxgroups: if withnuxgroups:
allowed[user + ':' + role] = 1 allowed[user + ':' + role] = 1
else: else:
allowed['user:' + user + ':' + role] = 1 allowed['user:' + user + ':' + role] = 1
elif 'Owner' in allowed:
ob._v_view_permission_owner = user
if allowed.has_key('Owner'): if allowed.has_key('Owner'):
del allowed['Owner'] del allowed['Owner']
else:
ob._v_view_permission_owner = None
return list(allowed.keys()) return list(allowed.keys())
class RelatedBaseCategory(Method): class RelatedBaseCategory(Method):
......
...@@ -1704,12 +1704,17 @@ class Base( CopyContainer, ...@@ -1704,12 +1704,17 @@ class Base( CopyContainer,
security.declareProtected( Permissions.AccessContentsInformation, 'getViewPermissionOwner' ) security.declareProtected( Permissions.AccessContentsInformation, 'getViewPermissionOwner' )
def getViewPermissionOwner(self): def getViewPermissionOwner(self):
""" """
Returns the user ID of the owner if this user has View permission, Returns the user ID of the owner if Owner role
otherwise returns None. has View permission. Returns None else.
""" """
owner = self.getWrappedOwner() marker = []
if owner is not None and owner.has_permission(Permissions.View, self): if getattr(aq_base(self), '_v_view_permission_owner', marker) is not marker:
return str(owner) return self._v_view_permission_owner
path, user_id = self.getOwnerTuple()
if 'Owner' in rolesForPermissionOn(Permissions.View, self):
path, user_id = self.getOwnerTuple()
return user_id
return None return None
# Private accessors for the implementation of relations based on # Private accessors for the implementation of relations based on
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment