From 51c7734ef3e2c58d8fe94aa97450feb60d9276ba Mon Sep 17 00:00:00 2001 From: "Chong Wang (cwg)" Date: Fri, 10 Jun 2022 14:17:23 +0000 Subject: [PATCH] [IMP] base: allow non-administrators to search res.groups by names before this commit: users without read permission of ir.module.category cannot search res.groups by names. An access error will be raised. after this commit: all users with read permission of res.groups can search res.groups by names closes odoo/odoo#97877 Signed-off-by: Raphael Collet --- odoo/addons/base/models/res_users.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/odoo/addons/base/models/res_users.py b/odoo/addons/base/models/res_users.py index 4b3cf333cbc..a51bdcc8726 100644 --- a/odoo/addons/base/models/res_users.py +++ b/odoo/addons/base/models/res_users.py @@ -162,11 +162,7 @@ class Groups(models.Model): def _search_full_name(self, operator, operand): lst = True if isinstance(operand, bool): - domains = [[('name', operator, operand)], [('category_id.name', operator, operand)]] - if operator in expression.NEGATIVE_TERM_OPERATORS == (not operand): - return expression.AND(domains) - else: - return expression.OR(domains) + return [[('name', operator, operand)]] if isinstance(operand, str): lst = False operand = [operand] @@ -176,7 +172,9 @@ class Groups(models.Model): group_name = values.pop().strip() category_name = values and '/'.join(values).strip() or group_name group_domain = [('name', operator, lst and [group_name] or group_name)] - category_domain = [('category_id.name', operator, lst and [category_name] or category_name)] + category_ids = self.env['ir.module.category'].sudo()._search( + [('name', operator, [category_name] if lst else category_name)]) + category_domain = [('category_id', 'in', category_ids)] if operator in expression.NEGATIVE_TERM_OPERATORS and not values: category_domain = expression.OR([category_domain, [('category_id', '=', False)]]) if (operator in expression.NEGATIVE_TERM_OPERATORS) == (not values):