From 35b9e48396c09243bcf7c21aeba725feeb3f2f94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 5 Jul 2022 07:24:10 +0000 Subject: [PATCH] [FW][FIX][IMP] knowledge: lessen usage of member writable constraint MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Purpose of this commit is to have less check on "is writable" constraint from member model. With a new context key we can now bypass the constraint from member model when we are sure it is globally verified. As in some cases we modify members from an article, the constraint will be checked at article level with all members being updated. In some cases doing specific checks might lead to issues when the constraint is evaluated in a transient state e.g. when a member is removed while new write members are not yet added. Task-2859616 X-original-commit: odoo/odoo@a4aa8569026b02f57d86dafcb5c2c140526f38ac Part-of: odoo/odoo#95471 Co-authored-by: Aurélien Warnon Co-authored-by: Thibault Delavallee --- addons/knowledge/models/knowledge_article.py | 2 +- addons/knowledge/models/knowledge_article_member.py | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/addons/knowledge/models/knowledge_article.py b/addons/knowledge/models/knowledge_article.py index 0f3b25c16b1..dcc410c4755 100644 --- a/addons/knowledge/models/knowledge_article.py +++ b/addons/knowledge/models/knowledge_article.py @@ -1241,7 +1241,7 @@ class Article(models.Model): })) article_values['article_member_ids'] = member_command - return writable_self.write(article_values) + return writable_self.with_context(knowledge_member_skip_writable_check=True).write(article_values) # ------------------------------------------------------------ # PERMISSIONS BATCH COMPUTATION diff --git a/addons/knowledge/models/knowledge_article_member.py b/addons/knowledge/models/knowledge_article_member.py index 2b9bee70834..a2155355b58 100644 --- a/addons/knowledge/models/knowledge_article_member.py +++ b/addons/knowledge/models/knowledge_article_member.py @@ -49,6 +49,9 @@ class ArticleMember(models.Model): in self (the ones that will be deleted) to check if one of the remaining members has write access. """ + if self.env.context.get('knowledge_member_skip_writable_check'): + return + articles_to_check = self.article_id.filtered(lambda a: a.inherited_permission != 'write') if not articles_to_check: return