fix(plating-sec): move cross-module implied_ids out of fp_security_v2.xml
The previous commit (a53b0326) added implied_ids in fp_security_v2.xml
that referenced 5 xmlids from downstream modules (configurator/receiving/
invoicing/cgp). Since fusion_plating is the BASE module and loads first
at fresh install, those refs raised External-ID-not-found at install.
Fix: relocate the 5 cross-module implications into each downstream module's
own security file via additive (4, ref()) writes to the core group's
implied_ids. Odoo's XML data loader treats these as additive updates so
they stack cleanly across install + -u cycles.
Also: drop redundant <data noupdate="0"> wrapper in fp_security_v2.xml
to match sibling fp_security.xml's bare <odoo> shape.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,85 +1,81 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data noupdate="0">
|
||||
<!-- Phase 1 Permissions Overhaul: 8 consolidated roles -->
|
||||
<!-- See docs/superpowers/specs/2026-05-23-permissions-overhaul-design.md -->
|
||||
<!-- Phase 1 Permissions Overhaul: 8 consolidated roles -->
|
||||
<!-- See docs/superpowers/specs/2026-05-23-permissions-overhaul-design.md -->
|
||||
<!-- Cross-module implications (estimator, receiving, accounting, cgp_officer,
|
||||
cgp_designated_official) live in the downstream modules' security files
|
||||
to avoid fresh-install forward-ref errors. -->
|
||||
|
||||
<record id="group_fp_technician" model="res.groups">
|
||||
<field name="name">Technician</field>
|
||||
<field name="sequence">10</field>
|
||||
<field name="privilege_id" ref="fusion_plating.res_groups_privilege_fusion_plating"/>
|
||||
<field name="implied_ids" eval="[
|
||||
(4, ref('base.group_user')),
|
||||
(4, ref('fusion_plating.group_fusion_plating_operator')),
|
||||
]"/>
|
||||
</record>
|
||||
<record id="group_fp_technician" model="res.groups">
|
||||
<field name="name">Technician</field>
|
||||
<field name="sequence">10</field>
|
||||
<field name="privilege_id" ref="fusion_plating.res_groups_privilege_fusion_plating"/>
|
||||
<field name="implied_ids" eval="[
|
||||
(4, ref('base.group_user')),
|
||||
(4, ref('fusion_plating.group_fusion_plating_operator')),
|
||||
]"/>
|
||||
</record>
|
||||
|
||||
<record id="group_fp_sales_rep" model="res.groups">
|
||||
<field name="name">Sales Representative</field>
|
||||
<field name="sequence">20</field>
|
||||
<field name="privilege_id" ref="fusion_plating.res_groups_privilege_fusion_plating"/>
|
||||
<field name="implied_ids" eval="[
|
||||
(4, ref('base.group_user')),
|
||||
(4, ref('fusion_plating_configurator.group_fp_estimator')),
|
||||
]"/>
|
||||
</record>
|
||||
<record id="group_fp_sales_rep" model="res.groups">
|
||||
<field name="name">Sales Representative</field>
|
||||
<field name="sequence">20</field>
|
||||
<field name="privilege_id" ref="fusion_plating.res_groups_privilege_fusion_plating"/>
|
||||
<field name="implied_ids" eval="[
|
||||
(4, ref('base.group_user')),
|
||||
]"/>
|
||||
</record>
|
||||
|
||||
<record id="group_fp_shop_manager_v2" model="res.groups">
|
||||
<field name="name">Shop Manager</field>
|
||||
<field name="sequence">30</field>
|
||||
<field name="privilege_id" ref="fusion_plating.res_groups_privilege_fusion_plating"/>
|
||||
<field name="implied_ids" eval="[
|
||||
(4, ref('group_fp_technician')),
|
||||
(4, ref('fusion_plating.group_fusion_plating_supervisor')),
|
||||
(4, ref('fusion_plating_receiving.group_fp_receiving')),
|
||||
]"/>
|
||||
</record>
|
||||
<record id="group_fp_shop_manager_v2" model="res.groups">
|
||||
<field name="name">Shop Manager</field>
|
||||
<field name="sequence">30</field>
|
||||
<field name="privilege_id" ref="fusion_plating.res_groups_privilege_fusion_plating"/>
|
||||
<field name="implied_ids" eval="[
|
||||
(4, ref('group_fp_technician')),
|
||||
(4, ref('fusion_plating.group_fusion_plating_supervisor')),
|
||||
]"/>
|
||||
</record>
|
||||
|
||||
<record id="group_fp_sales_manager" model="res.groups">
|
||||
<field name="name">Sales Manager</field>
|
||||
<field name="sequence">40</field>
|
||||
<field name="privilege_id" ref="fusion_plating.res_groups_privilege_fusion_plating"/>
|
||||
<field name="implied_ids" eval="[
|
||||
(4, ref('group_fp_sales_rep')),
|
||||
]"/>
|
||||
</record>
|
||||
<record id="group_fp_sales_manager" model="res.groups">
|
||||
<field name="name">Sales Manager</field>
|
||||
<field name="sequence">40</field>
|
||||
<field name="privilege_id" ref="fusion_plating.res_groups_privilege_fusion_plating"/>
|
||||
<field name="implied_ids" eval="[
|
||||
(4, ref('group_fp_sales_rep')),
|
||||
]"/>
|
||||
</record>
|
||||
|
||||
<record id="group_fp_manager" model="res.groups">
|
||||
<field name="name">Manager</field>
|
||||
<field name="sequence">50</field>
|
||||
<field name="privilege_id" ref="fusion_plating.res_groups_privilege_fusion_plating"/>
|
||||
<field name="implied_ids" eval="[
|
||||
(4, ref('group_fp_shop_manager_v2')),
|
||||
(4, ref('group_fp_sales_manager')),
|
||||
(4, ref('fusion_plating.group_fusion_plating_manager')),
|
||||
(4, ref('fusion_plating_invoicing.group_fp_accounting')),
|
||||
]"/>
|
||||
</record>
|
||||
<record id="group_fp_manager" model="res.groups">
|
||||
<field name="name">Manager</field>
|
||||
<field name="sequence">50</field>
|
||||
<field name="privilege_id" ref="fusion_plating.res_groups_privilege_fusion_plating"/>
|
||||
<field name="implied_ids" eval="[
|
||||
(4, ref('group_fp_shop_manager_v2')),
|
||||
(4, ref('group_fp_sales_manager')),
|
||||
(4, ref('fusion_plating.group_fusion_plating_manager')),
|
||||
]"/>
|
||||
</record>
|
||||
|
||||
<record id="group_fp_quality_manager" model="res.groups">
|
||||
<field name="name">Quality Manager</field>
|
||||
<field name="sequence">60</field>
|
||||
<field name="privilege_id" ref="fusion_plating.res_groups_privilege_fusion_plating"/>
|
||||
<field name="implied_ids" eval="[
|
||||
(4, ref('group_fp_manager')),
|
||||
(4, ref('fusion_plating_cgp.group_fusion_plating_cgp_officer')),
|
||||
]"/>
|
||||
</record>
|
||||
<record id="group_fp_quality_manager" model="res.groups">
|
||||
<field name="name">Quality Manager</field>
|
||||
<field name="sequence">60</field>
|
||||
<field name="privilege_id" ref="fusion_plating.res_groups_privilege_fusion_plating"/>
|
||||
<field name="implied_ids" eval="[
|
||||
(4, ref('group_fp_manager')),
|
||||
]"/>
|
||||
</record>
|
||||
|
||||
<record id="group_fp_owner" model="res.groups">
|
||||
<field name="name">Owner</field>
|
||||
<field name="sequence">70</field>
|
||||
<field name="privilege_id" ref="fusion_plating.res_groups_privilege_fusion_plating"/>
|
||||
<field name="implied_ids" eval="[
|
||||
(4, ref('group_fp_quality_manager')),
|
||||
(4, ref('fusion_plating.group_fusion_plating_admin')),
|
||||
(4, ref('fusion_plating_cgp.group_fusion_plating_cgp_designated_official')),
|
||||
(4, ref('base.group_system')),
|
||||
]"/>
|
||||
<field name="user_ids" eval="[
|
||||
(4, ref('base.user_root')),
|
||||
(4, ref('base.user_admin')),
|
||||
]"/>
|
||||
</record>
|
||||
</data>
|
||||
<record id="group_fp_owner" model="res.groups">
|
||||
<field name="name">Owner</field>
|
||||
<field name="sequence">70</field>
|
||||
<field name="privilege_id" ref="fusion_plating.res_groups_privilege_fusion_plating"/>
|
||||
<field name="implied_ids" eval="[
|
||||
(4, ref('group_fp_quality_manager')),
|
||||
(4, ref('fusion_plating.group_fusion_plating_admin')),
|
||||
(4, ref('base.group_system')),
|
||||
]"/>
|
||||
<field name="user_ids" eval="[
|
||||
(4, ref('base.user_root')),
|
||||
(4, ref('base.user_admin')),
|
||||
]"/>
|
||||
</record>
|
||||
</odoo>
|
||||
|
||||
Reference in New Issue
Block a user