From 737c801b0effee4d4f35207ccf3489bf1190a3ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Thu, 5 Feb 2026 12:20:10 +0100 Subject: [PATCH 1/3] [IMP] dms_auto_classification: Add wizard.dms.classification.detail ACL to group_dms_user TT60719 --- dms_auto_classification/security/ir.model.access.csv | 1 + 1 file changed, 1 insertion(+) diff --git a/dms_auto_classification/security/ir.model.access.csv b/dms_auto_classification/security/ir.model.access.csv index a15072901..6df2109ab 100644 --- a/dms_auto_classification/security/ir.model.access.csv +++ b/dms_auto_classification/security/ir.model.access.csv @@ -2,4 +2,5 @@ id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink access_dms_classification_template_user,dms_classification_template_user,model_dms_classification_template,dms.group_dms_user,1,0,0,0 access_dms_classification_template_manager,dms_classification_template_manager,model_dms_classification_template,dms.group_dms_manager,1,1,1,1 access_wizard_dms_classification_manager,wizard_dms_classification_manager,model_wizard_dms_classification,dms.group_dms_user,1,1,1,1 +access_wizard_dms_classification_detail_user,wizard_dms_classification_detail_user,model_dms_classification_template,dms.group_dms_user,1,1,1,0 access_wizard_dms_classification_detail_manager,wizard_dms_classification_detail_manager,model_wizard_dms_classification_detail,dms.group_dms_user,1,1,1,1 From 4e5e4ab5501165f1434470d5420ab9b2776ddacc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Fri, 6 Feb 2026 09:59:27 +0100 Subject: [PATCH 2/3] [IMP] dms_field_auto_classification: Define the appropriate record_ref if the directory (directory_id) is a subdirectory TT60821 --- .../wizards/wizard_dms_classification.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/dms_field_auto_classification/wizards/wizard_dms_classification.py b/dms_field_auto_classification/wizards/wizard_dms_classification.py index 7920d1347..a6d6c03e7 100644 --- a/dms_field_auto_classification/wizards/wizard_dms_classification.py +++ b/dms_field_auto_classification/wizards/wizard_dms_classification.py @@ -33,6 +33,11 @@ def _compute_record_ref(self): directory = False if record.directory_id.res_model and record.directory_id.res_id: directory = record.directory_id + elif ( + record.directory_id.parent_id.res_model + and record.directory_id.parent_id.res_id + ): + directory = record.directory_id.parent_id elif ( record.directory_id.root_directory_id.res_model and record.directory_id.root_directory_id.res_id From d9ff4a6610874f690dbe5b7f8818d004e9f2b216 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Thu, 5 Feb 2026 08:28:31 +0100 Subject: [PATCH 3/3] [IMP+FIX] dms_auto_classification: Filter by the appropriate directories (company compatibility) It is important not to apply sudo() to filter by the directories to which the user has access and to filter only by those of the appropriate company. TT60719 --- .../wizards/wizard_dms_classification.py | 12 ++++++++++-- .../wizards/wizard_dms_classification.py | 11 ++++++----- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/dms_auto_classification/wizards/wizard_dms_classification.py b/dms_auto_classification/wizards/wizard_dms_classification.py index 03b71add5..e306d590e 100644 --- a/dms_auto_classification/wizards/wizard_dms_classification.py +++ b/dms_auto_classification/wizards/wizard_dms_classification.py @@ -1,4 +1,4 @@ -# Copyright 2024 Tecnativa - Víctor Martínez +# Copyright 2024-2026 Tecnativa - Víctor Martínez # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl) import base64 import re @@ -13,6 +13,12 @@ class WizardDmsClassification(models.TransientModel): _name = "wizard.dms.classification" _description = "Wizard Dms Classification" + company_id = fields.Many2one( + comodel_name="res.company", + required=True, + default=lambda self: self.env.company, + string="Company", + ) state = fields.Selection( selection=[ ("draft", "Draft"), @@ -24,6 +30,7 @@ class WizardDmsClassification(models.TransientModel): comodel_name="dms.classification.template", string="Template", required=True, + domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]", ) data_file = fields.Binary( string="File", @@ -175,7 +182,8 @@ def _compute_file_name(self): @api.depends("file_name") def _compute_directory_id(self): - directories = self.env["dms.directory"].sudo().search([]) + domain = [("company_id", "=", self.parent_id.company_id.id)] + directories = self.env["dms.directory"].search(domain) for item in self: item.directory_id = self.parent_id._get_directory_from_pattern( self.parent_id.template_id.directory_pattern, directories diff --git a/dms_field_auto_classification/wizards/wizard_dms_classification.py b/dms_field_auto_classification/wizards/wizard_dms_classification.py index a6d6c03e7..63567351c 100644 --- a/dms_field_auto_classification/wizards/wizard_dms_classification.py +++ b/dms_field_auto_classification/wizards/wizard_dms_classification.py @@ -1,4 +1,4 @@ -# Copyright 2024 Tecnativa - Víctor Martínez +# Copyright 2024-2026 Tecnativa - Víctor Martínez # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). import re @@ -51,9 +51,12 @@ def _compute_record_ref(self): def _compute_directory_id(self): """Overwrite to redefine the directory if the template has a linked model.""" self_with_model = self.filtered(lambda x: x.template_id.model_id) - directory_model = self.env["dms.directory"].sudo() + _self = self - self_with_model + res = super(WizardDmsClassificationDetail, _self)._compute_directory_id() + directory_model = self.env["dms.directory"] for item in self_with_model: domain = [ + ("company_id", "=", self.parent_id.company_id.id), ("res_model", "=", item.template_id.model_id.model), ("res_id", ">", 0), ] @@ -77,6 +80,4 @@ def _compute_directory_id(self): item.directory_id = self.parent_id._get_directory_from_pattern( directory_pattern, directories ) - return super( - WizardDmsClassificationDetail, (self - self_with_model) - )._compute_directory_id() + return res