From 4ddbe435a54821086965221337e7ba4946496f9d Mon Sep 17 00:00:00 2001
From: Vincent Pelletier <vincent@nexedi.com>
Date: Fri, 18 Sep 2015 17:06:48 +0200
Subject: [PATCH] ERP5Catalog: Do not propagate local_roles to ZSQLCatalog.

local_roles is handled entirely inside ERP5Catalog, so to not tell
ZSQLCatalog about it - it can do nothing right with it anyway.
Also, get rid of abusive **kw use in this code path.
Also, actually pass sql_catalog_id to getAllowedRolesAndUsers.
---
 product/ERP5Catalog/CatalogTool.py | 37 ++++++++++++++++++++----------
 1 file changed, 25 insertions(+), 12 deletions(-)

diff --git a/product/ERP5Catalog/CatalogTool.py b/product/ERP5Catalog/CatalogTool.py
index c17ddffb72..96230c8831 100644
--- a/product/ERP5Catalog/CatalogTool.py
+++ b/product/ERP5Catalog/CatalogTool.py
@@ -432,7 +432,7 @@ class CatalogTool (UniqueObject, ZCatalog, CMFCoreCatalogTool, ActiveObject):
 
 
     security.declarePublic('getAllowedRolesAndUsers')
-    def getAllowedRolesAndUsers(self, sql_catalog_id=None, **kw):
+    def getAllowedRolesAndUsers(self, sql_catalog_id=None, local_roles=None):
       """
         Return allowed roles and users.
 
@@ -472,7 +472,6 @@ class CatalogTool (UniqueObject, ZCatalog, CMFCoreCatalogTool, ActiveObject):
 
       # Patch for ERP5 by JP Smets in order
       # to implement worklists and search of local roles
-      local_roles = kw.get('local_roles', None)
       if local_roles:
         local_role_dict = dict(catalog.getSQLCatalogLocalRoleKeysList())
         role_dict = dict(catalog.getSQLCatalogRoleKeysList())
@@ -513,7 +512,7 @@ class CatalogTool (UniqueObject, ZCatalog, CMFCoreCatalogTool, ActiveObject):
 
       return allowedRolesAndUsers, role_column_dict, local_role_column_dict
 
-    def getSecurityUidDictAndRoleColumnDict(self, sql_catalog_id=None, **kw):
+    def getSecurityUidDictAndRoleColumnDict(self, sql_catalog_id=None, local_roles=None):
       """
         Return a dict of local_roles_group_id -> security Uids and a
         dictionnary containing available role columns.
@@ -523,7 +522,10 @@ class CatalogTool (UniqueObject, ZCatalog, CMFCoreCatalogTool, ActiveObject):
         catalogs.
       """
       allowedRolesAndUsers, role_column_dict, local_role_column_dict = \
-          self.getAllowedRolesAndUsers(**kw)
+          self.getAllowedRolesAndUsers(
+            sql_catalog_id=sql_catalog_id,
+            local_roles=local_roles,
+          )
       catalog = self.getSQLCatalog(sql_catalog_id)
       method = getattr(catalog, catalog.sql_search_security, None)
       if allowedRolesAndUsers:
@@ -562,7 +564,7 @@ class CatalogTool (UniqueObject, ZCatalog, CMFCoreCatalogTool, ActiveObject):
       return security_uid_dict, role_column_dict, local_role_column_dict
 
     security.declarePublic('getSecurityQuery')
-    def getSecurityQuery(self, query=None, sql_catalog_id=None, **kw):
+    def getSecurityQuery(self, query=None, sql_catalog_id=None, local_roles=None, **kw):
       """
         Build a query based on allowed roles or on a list of security_uid
         values. The query takes into account the fact that some roles are
@@ -576,7 +578,10 @@ class CatalogTool (UniqueObject, ZCatalog, CMFCoreCatalogTool, ActiveObject):
         return query
       original_query = query
       security_uid_dict, role_column_dict, local_role_column_dict = \
-          self.getSecurityUidDictAndRoleColumnDict(sql_catalog_id=sql_catalog_id, **kw)
+          self.getSecurityUidDictAndRoleColumnDict(
+            sql_catalog_id=sql_catalog_id,
+            local_roles=local_roles,
+          )
 
       role_query = None
       security_uid_query = None
@@ -634,7 +639,7 @@ class CatalogTool (UniqueObject, ZCatalog, CMFCoreCatalogTool, ActiveObject):
       return query
 
     # searchResults has inherited security assertions.
-    def searchResults(self, query=None, **kw):
+    def searchResults(self, query=None, sql_catalog_id=None, local_roles=None, **kw):
         """
         Calls ZCatalog.searchResults with extra arguments that
         limit the results to what the user is allowed to see.
@@ -645,8 +650,12 @@ class CatalogTool (UniqueObject, ZCatalog, CMFCoreCatalogTool, ActiveObject):
         #    kw[ 'effective' ] = { 'query' : now, 'range' : 'max' }
         #    kw[ 'expires'   ] = { 'query' : now, 'range' : 'min' }
 
-        catalog_id = self.getPreferredSQLCatalogId(kw.pop("sql_catalog_id", None))
-        query = self.getSecurityQuery(query=query, sql_catalog_id=catalog_id, **kw)
+        catalog_id = self.getPreferredSQLCatalogId(sql_catalog_id)
+        query = self.getSecurityQuery(
+          query=query,
+          sql_catalog_id=catalog_id,
+          local_roles=local_roles,
+        )
         kw.setdefault('limit', self.default_result_limit)
         # get catalog from preference
         #LOG("searchResult", INFO, catalog_id)
@@ -691,7 +700,7 @@ class CatalogTool (UniqueObject, ZCatalog, CMFCoreCatalogTool, ActiveObject):
         except IndexError:
           return None
 
-    def countResults(self, query=None, **kw):
+    def countResults(self, query=None, sql_catalog_id=None, local_roles=None, **kw):
         """
             Calls ZCatalog.countResults with extra arguments that
             limit the results to what the user is allowed to see.
@@ -703,8 +712,12 @@ class CatalogTool (UniqueObject, ZCatalog, CMFCoreCatalogTool, ActiveObject):
         #    now = DateTime()
         #    #kw[ 'effective' ] = { 'query' : now, 'range' : 'max' }
         #    #kw[ 'expires'   ] = { 'query' : now, 'range' : 'min' }
-        catalog_id = self.getPreferredSQLCatalogId(kw.pop("sql_catalog_id", None))
-        query = self.getSecurityQuery(query=query, sql_catalog_id=catalog_id, **kw)
+        catalog_id = self.getPreferredSQLCatalogId(sql_catalog_id)
+        query = self.getSecurityQuery(
+          query=query,
+          sql_catalog_id=catalog_id,
+          local_roles=local_roles,
+        )
         kw.setdefault('limit', self.default_count_limit)
         # get catalog from preference
         return ZCatalog.countResults(self, query=query, sql_catalog_id=catalog_id, **kw)
-- 
2.30.9