From 8f24e9e776ddec5361db8b5aaf092555f10d3ee3 Mon Sep 17 00:00:00 2001 From: Monica Diaz Pena Date: Thu, 26 Dec 2019 14:31:56 -0500 Subject: [PATCH] Avoid Access Error when search with suspend security. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Odoo `_search` function performs a `sudo` on the first line of its implementation, causing that the uid's wrapper (class BaseSuspendSecurityUid) is lost. This is evidenced when a function with suspend security is called and in its implementation needs the values ​​of a 'one2many' field (it does a `search` in another model without reading access) an Access Error is raised. --- base_suspend_security/models/base.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/base_suspend_security/models/base.py b/base_suspend_security/models/base.py index f187e339..822b548e 100644 --- a/base_suspend_security/models/base.py +++ b/base_suspend_security/models/base.py @@ -1,7 +1,7 @@ # Copyright 2016 ACSONE SA/NV # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import api, models +from odoo import api, models, SUPERUSER_ID from ..base_suspend_security import BaseSuspendSecurityUid @@ -17,3 +17,12 @@ class Base(models.AbstractModel): self.env.cr, BaseSuspendSecurityUid(self.env.uid), self.env.context)) + + def sudo(self, user=SUPERUSER_ID): + if isinstance(self.env.uid, BaseSuspendSecurityUid): + return self.with_env( + api.Environment( + self.env.cr, BaseSuspendSecurityUid(user), self.env.context + ) + ) + return super().sudo(user)