From 4e0ddf60fa6e242a5c00807571dd6345ccc12f03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Thu, 18 Apr 2024 19:22:07 +0200 Subject: [PATCH] Fallback to default model access if RPC request fails (grafted from 5680160a1ab68e8e30e05265aef34eea44be0139) --HG-- branch : 7.0 --- sao/src/common.js | 33 +++++++++++++++++++++++++-------- tryton/tryton/common/common.py | 11 +++++++++-- 2 files changed, 34 insertions(+), 10 deletions(-) diff --git a/sao/src/common.js b/sao/src/common.js index 2088d1b9d8..c5f175c178 100644 --- a/sao/src/common.js +++ b/sao/src/common.js @@ -484,10 +484,14 @@ if (!refresh) { this._access = {}; } - this._models = Sao.rpc({ - 'method': 'model.ir.model.list_models', - 'params': [{}] - }, Sao.Session.current_session, false); + try { + this._models = Sao.rpc({ + 'method': 'model.ir.model.list_models', + 'params': [{}] + }, Sao.Session.current_session, false); + } catch(e) { + Sao.Logger.error("Unable to get model list."); + } }, get: function(model) { if (this._access[model] !== undefined) { @@ -501,10 +505,23 @@ var to_load = this._models.slice( Math.max(0, idx - Math.floor(this.batchnum / 2)), idx + Math.floor(this.batchnum / 2)); - var access = Sao.rpc({ - 'method': 'model.ir.model.access.get_access', - 'params': [to_load, {}] - }, Sao.Session.current_session, false); + var access; + try { + access = Sao.rpc({ + 'method': 'model.ir.model.access.get_access', + 'params': [to_load, {}] + }, Sao.Session.current_session, false); + } catch(e) { + Sao.Logger.error(`Unable to get access for ${model}.`); + access = { + model: { + 'read': true, + 'write': false, + 'create': false, + 'delete': false, + }, + }; + } this._access = jQuery.extend(this._access, access); return this._access[model]; } diff --git a/tryton/tryton/common/common.py b/tryton/tryton/common/common.py index 7aa9f236d2..856ce6d9e7 100644 --- a/tryton/tryton/common/common.py +++ b/tryton/tryton/common/common.py @@ -229,7 +229,7 @@ class ModelAccess(object): self._models = rpc.execute('model', 'ir.model', 'list_models', rpc.CONTEXT) except TrytonServerError: - pass + logger.error("Unable to get model list.") def __getitem__(self, model): if model in self._access: @@ -243,7 +243,14 @@ class ModelAccess(object): access = rpc.execute('model', 'ir.model.access', 'get_access', self._models[to_load], rpc.CONTEXT) except TrytonServerError: - access = {} + logger.error("Unable to get access for %s.", model) + access = { + model: { + 'read': True, + 'write': False, + 'create': False, + 'delete': False}, + } self._access.update(access) return self._access[model]