From 381bf9b354e4c26ab8a2e2d221f442090895ed10 Mon Sep 17 00:00:00 2001 From: Suherdy Yacob Date: Mon, 16 Feb 2026 11:36:57 +0700 Subject: [PATCH] fix: Apply `sudo()` to user field access and enhance warehouse and location domain conditions across various access rules. --- security/ir_rule.xml | 22 +++---- security/ir_rule.xml.bak | 130 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 141 insertions(+), 11 deletions(-) create mode 100644 security/ir_rule.xml.bak diff --git a/security/ir_rule.xml b/security/ir_rule.xml index 44a08d9..347a32a 100644 --- a/security/ir_rule.xml +++ b/security/ir_rule.xml @@ -15,7 +15,7 @@ ( [(1, '=', 1)] if user.env.context.get('bypass_user_restriction') or user.has_group('base.group_system') else - [('id', 'in', user.allowed_warehouse_ids.ids)] if user.allowed_warehouse_ids else [(1, '=', 1)] + [('id', 'in', user.sudo().allowed_warehouse_ids.ids + user.sudo().allowed_location_ids.warehouse_id.ids)] if (user.sudo().allowed_warehouse_ids or user.sudo().allowed_location_ids) else [(1, '=', 1)] ) @@ -28,7 +28,7 @@ ( [(1, '=', 1)] if user.env.context.get('bypass_user_restriction') or user.has_group('base.group_system') else - ['|', ('id', 'in', user.allowed_picking_type_ids.ids), ('warehouse_id', 'in', (user.allowed_warehouse_ids + user.allowed_location_ids.warehouse_id).ids)] if (user.allowed_picking_type_ids or user.allowed_warehouse_ids or user.allowed_location_ids) else [(1, '=', 1)] + ['|', ('id', 'in', user.sudo().allowed_picking_type_ids.ids), ('warehouse_id', 'in', user.sudo().allowed_warehouse_ids.ids + user.sudo().allowed_location_ids.warehouse_id.ids)] if (user.sudo().allowed_picking_type_ids or user.sudo().allowed_warehouse_ids or user.sudo().allowed_location_ids) else [(1, '=', 1)] ) @@ -41,7 +41,7 @@ ( [(1, '=', 1)] if user.env.context.get('bypass_user_restriction') or user.has_group('base.group_system') else - ['|', '|', '|', ('id', 'in', user.allowed_location_ids.ids), ('id', 'child_of', user.allowed_location_ids.ids), ('id', 'parent_of', user.allowed_location_ids.ids), ('warehouse_id', 'in', (user.allowed_warehouse_ids + user.allowed_location_ids.warehouse_id).ids)] if (user.allowed_location_ids or user.allowed_warehouse_ids) else [(1, '=', 1)] + ['|', '|', '|', ('id', 'in', user.sudo().allowed_location_ids.ids), ('id', 'child_of', user.sudo().allowed_location_ids.ids), ('id', 'parent_of', user.sudo().allowed_location_ids.ids), ('warehouse_id', 'in', user.sudo().allowed_warehouse_ids.ids + user.sudo().allowed_location_ids.warehouse_id.ids)] if (user.sudo().allowed_location_ids or user.sudo().allowed_warehouse_ids) else [(1, '=', 1)] ) @@ -54,7 +54,7 @@ ( [(1, '=', 1)] if user.env.context.get('bypass_user_restriction') or user.has_group('base.group_system') else - ['|', ('location_id', 'in', user.allowed_location_ids.ids), ('location_id', 'child_of', user.allowed_location_ids.ids)] if user.allowed_location_ids else [(1, '=', 1)] + ['|', '|', ('location_id', 'in', user.sudo().allowed_location_ids.ids), ('location_id', 'child_of', user.sudo().allowed_location_ids.ids), ('location_id.warehouse_id', 'in', user.sudo().allowed_warehouse_ids.ids + user.sudo().allowed_location_ids.warehouse_id.ids)] if (user.sudo().allowed_location_ids or user.sudo().allowed_warehouse_ids) else [(1, '=', 1)] ) @@ -67,8 +67,8 @@ ( [(1, '=', 1)] if user.env.context.get('bypass_user_restriction') or user.has_group('base.group_system') else - ['|', '|', ('location_id', 'in', user.allowed_location_ids.ids), ('location_id', 'child_of', user.allowed_location_ids.ids), - '|', ('location_dest_id', 'in', user.allowed_location_ids.ids), ('location_dest_id', 'child_of', user.allowed_location_ids.ids)] if user.allowed_location_ids else [(1, '=', 1)] + ['|', '|', '|', '|', ('location_id', 'in', user.sudo().allowed_location_ids.ids), ('location_id', 'child_of', user.sudo().allowed_location_ids.ids), ('location_id.warehouse_id', 'in', user.sudo().allowed_warehouse_ids.ids + user.sudo().allowed_location_ids.warehouse_id.ids), + '|', '|', ('location_dest_id', 'in', user.sudo().allowed_location_ids.ids), ('location_dest_id', 'child_of', user.sudo().allowed_location_ids.ids), ('location_dest_id.warehouse_id', 'in', user.sudo().allowed_warehouse_ids.ids + user.sudo().allowed_location_ids.warehouse_id.ids)] if (user.sudo().allowed_location_ids or user.sudo().allowed_warehouse_ids) else [(1, '=', 1)] ) @@ -81,8 +81,8 @@ ( [(1, '=', 1)] if user.env.context.get('bypass_user_restriction') or user.has_group('base.group_system') else - ['|', '|', ('location_id', 'in', user.allowed_location_ids.ids), ('location_id', 'child_of', user.allowed_location_ids.ids), - '|', ('location_dest_id', 'in', user.allowed_location_ids.ids), ('location_dest_id', 'child_of', user.allowed_location_ids.ids)] if user.allowed_location_ids else [(1, '=', 1)] + ['|', '|', '|', '|', ('location_id', 'in', user.sudo().allowed_location_ids.ids), ('location_id', 'child_of', user.sudo().allowed_location_ids.ids), ('location_id.warehouse_id', 'in', user.sudo().allowed_warehouse_ids.ids + user.sudo().allowed_location_ids.warehouse_id.ids), + '|', '|', ('location_dest_id', 'in', user.sudo().allowed_location_ids.ids), ('location_dest_id', 'child_of', user.sudo().allowed_location_ids.ids), ('location_dest_id.warehouse_id', 'in', user.sudo().allowed_warehouse_ids.ids + user.sudo().allowed_location_ids.warehouse_id.ids)] if (user.sudo().allowed_location_ids or user.sudo().allowed_warehouse_ids) else [(1, '=', 1)] ) @@ -95,7 +95,7 @@ ( [(1, '=', 1)] if user.env.context.get('bypass_user_restriction') or user.has_group('base.group_system') else - [('id', 'in', user.allowed_workcenter_ids.ids)] if user.allowed_workcenter_ids else [(1, '=', 1)] + [('id', 'in', user.sudo().allowed_workcenter_ids.ids)] if user.sudo().allowed_workcenter_ids else [(1, '=', 1)] ) @@ -108,7 +108,7 @@ ( [(1, '=', 1)] if user.env.context.get('bypass_user_restriction') or user.has_group('base.group_system') else - [('id', 'in', user.allowed_approval_category_ids.ids)] if user.allowed_approval_category_ids else [(1, '=', 1)] + [('id', 'in', user.sudo().allowed_approval_category_ids.ids)] if user.sudo().allowed_approval_category_ids else [(1, '=', 1)] ) @@ -121,7 +121,7 @@ ( [(1, '=', 1)] if user.env.context.get('bypass_user_restriction') or user.has_group('base.group_system') else - [('warehouse_id', 'in', (user.allowed_warehouse_ids + user.allowed_location_ids.warehouse_id).ids)] if (user.allowed_warehouse_ids or user.allowed_location_ids) else [(1, '=', 1)] + [('warehouse_id', 'in', user.sudo().allowed_warehouse_ids.ids + user.sudo().allowed_location_ids.warehouse_id.ids)] if (user.sudo().allowed_warehouse_ids or user.sudo().allowed_location_ids) else [(1, '=', 1)] ) diff --git a/security/ir_rule.xml.bak b/security/ir_rule.xml.bak new file mode 100644 index 0000000..c54478b --- /dev/null +++ b/security/ir_rule.xml.bak @@ -0,0 +1,130 @@ + + + + + + + + Stock Warehouse Allowed Access + + + + ( + [(1, '=', 1)] if user.env.context.get('bypass_user_restriction') or user.has_group('base.group_system') else + [('id', 'in', user.allowed_warehouse_ids.ids)] if user.allowed_warehouse_ids else [(1, '=', 1)] + ) + + + + + + Stock Picking Type Allowed Access + + + + ( + [(1, '=', 1)] if user.env.context.get('bypass_user_restriction') or user.has_group('base.group_system') else + ['|', ('id', 'in', user.allowed_picking_type_ids.ids), ('warehouse_id', 'in', user.allowed_warehouse_ids.ids + user.sudo().allowed_location_ids.warehouse_id.ids)] if (user.allowed_picking_type_ids or user.allowed_warehouse_ids or user.allowed_location_ids) else [(1, '=', 1)] + ) + + + + + + Stock Location Allowed Access + + + + ( + [(1, '=', 1)] if user.env.context.get('bypass_user_restriction') or user.has_group('base.group_system') else + ['|', '|', '|', ('id', 'in', user.allowed_location_ids.ids), ('id', 'child_of', user.allowed_location_ids.ids), ('id', 'parent_of', user.allowed_location_ids.ids), ('warehouse_id', 'in', user.allowed_warehouse_ids.ids + user.sudo().allowed_location_ids.warehouse_id.ids)] if (user.allowed_location_ids or user.allowed_warehouse_ids) else [(1, '=', 1)] + ) + + + + + + Stock Quant Allowed Access + + + + ( + [(1, '=', 1)] if user.env.context.get('bypass_user_restriction') or user.has_group('base.group_system') else + ['|', ('location_id', 'in', user.allowed_location_ids.ids), ('location_id', 'child_of', user.allowed_location_ids.ids)] if user.allowed_location_ids else [(1, '=', 1)] + ) + + + + + + Stock Move Allowed Access + + + + ( + [(1, '=', 1)] if user.env.context.get('bypass_user_restriction') or user.has_group('base.group_system') else + ['|', '|', ('location_id', 'in', user.allowed_location_ids.ids), ('location_id', 'child_of', user.allowed_location_ids.ids), + '|', ('location_dest_id', 'in', user.allowed_location_ids.ids), ('location_dest_id', 'child_of', user.allowed_location_ids.ids)] if user.allowed_location_ids else [(1, '=', 1)] + ) + + + + + + Stock Move Line Allowed Access + + + + ( + [(1, '=', 1)] if user.env.context.get('bypass_user_restriction') or user.has_group('base.group_system') else + ['|', '|', ('location_id', 'in', user.allowed_location_ids.ids), ('location_id', 'child_of', user.allowed_location_ids.ids), + '|', ('location_dest_id', 'in', user.allowed_location_ids.ids), ('location_dest_id', 'child_of', user.allowed_location_ids.ids)] if user.allowed_location_ids else [(1, '=', 1)] + ) + + + + + + MRP Workcenter Allowed Access + + + + ( + [(1, '=', 1)] if user.env.context.get('bypass_user_restriction') or user.has_group('base.group_system') else + [('id', 'in', user.allowed_workcenter_ids.ids)] if user.allowed_workcenter_ids else [(1, '=', 1)] + ) + + + + + + Approval Category Allowed Access + + + + ( + [(1, '=', 1)] if user.env.context.get('bypass_user_restriction') or user.has_group('base.group_system') else + [('id', 'in', user.allowed_approval_category_ids.ids)] if user.allowed_approval_category_ids else [(1, '=', 1)] + ) + + + + + + Report Stock Quantity Allowed Access + + + + ( + [(1, '=', 1)] if user.env.context.get('bypass_user_restriction') or user.has_group('base.group_system') else + [('warehouse_id', 'in', user.allowed_warehouse_ids.ids + user.sudo().allowed_location_ids.warehouse_id.ids)] if (user.allowed_warehouse_ids or user.allowed_location_ids) else [(1, '=', 1)] + ) + + + + +