From e6b598cac97823e4a44a960d32d3df81a2599f4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 29 Jun 2022 07:45:10 +0000 Subject: [PATCH] [FW][FIX] knowledge: do not crash when public reads is_user_favorite Reading is_user_favorite requires access on intermediate favorite model. It is however not accessible to public users. Reading the field therefore raises an error which is not necessary. We can simply set the field to False as public users can not set articles as favorite and skip the whole computation. Task-2859616 X-original-commit: odoo/odoo@fe854b3636a720282e028f1c74203af15a7acdbe Part-of: odoo/odoo#95471 --- addons/knowledge/models/knowledge_article.py | 3 +++ addons/website_knowledge/tests/test_knowledge_security.py | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/addons/knowledge/models/knowledge_article.py b/addons/knowledge/models/knowledge_article.py index dfe5142d1c4..0f3b25c16b1 100644 --- a/addons/knowledge/models/knowledge_article.py +++ b/addons/knowledge/models/knowledge_article.py @@ -412,6 +412,9 @@ class Article(models.Model): @api.depends_context('uid') @api.depends('favorite_ids.user_id') def _compute_is_user_favorite(self): + if self.env.user._is_public(): + self.is_user_favorite = False + return for article in self: favorite = article.favorite_ids.filtered(lambda f: f.user_id == self.env.user) article.is_user_favorite = bool(favorite) diff --git a/addons/website_knowledge/tests/test_knowledge_security.py b/addons/website_knowledge/tests/test_knowledge_security.py index cbad5180c4a..58265b0ed8c 100644 --- a/addons/website_knowledge/tests/test_knowledge_security.py +++ b/addons/website_knowledge/tests/test_knowledge_security.py @@ -21,10 +21,11 @@ class TestWKnowledgeSecurity(KnowledgeCommonWData): article_shared.sudo().website_published = True article_shared.body # access body should not trigger acls + self.assertFalse(article_shared.is_user_favorite) # FAVOURITE with self.assertRaises(exceptions.AccessError, msg='ACLs: No favorite access to public'): - article_shared.is_user_favorite + self.env['knowledge.article.favorite'].search([]) @mute_logger('odoo.addons.base.models.ir_model', 'odoo.addons.base.models.ir_rule') @users('portal_test')