feat(plating-quality): split Manager vs Quality Manager permissions

Phase C of permissions overhaul (spec Section 2.C).

Manager keeps reactive Quality (NCR/Hold/Check/Cert/RMA — already gated
via Phase B sweep). QM gains exclusive write/create/unlink on strategic
Quality records:

- fusion.plating.capa: Manager → read-only (1,0,0,0); QM → full
- fusion.plating.audit: same split (if model present)
- fp.approved.vendor.list: same split (if model present)
- fusion.plating.customer.spec: same split
- Doc Control models: same split

Plus FAIR/Nadcap cert restriction via two new ir.rule records on
fp.certificate:
- Manager: write/create/unlink on certs where cert_type NOT in
  ('fair', 'nadcap')
- QM: write/create/unlink on all certs (overrides via OR within group)
- Read access unchanged for both (perm_read=False on the rules)

Tests in fusion_plating/tests/test_quality_split.py verify each side
of the split. Models that may not exist on all DBs (audit, AVL) use
skipTest gracefully.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
gsinghpal
2026-05-24 01:23:32 -04:00
parent f4e1f9d218
commit 84ed406c8e
7 changed files with 131 additions and 8 deletions

View File

@@ -4,7 +4,8 @@ access_fp_ncr_supervisor,fp.ncr.supervisor,model_fusion_plating_ncr,fusion_plati
access_fp_ncr_manager,fp.ncr.manager,model_fusion_plating_ncr,fusion_plating.group_fp_manager,1,1,1,1
access_fp_capa_operator,fp.capa.operator,model_fusion_plating_capa,fusion_plating.group_fp_technician,1,0,0,0
access_fp_capa_supervisor,fp.capa.supervisor,model_fusion_plating_capa,fusion_plating.group_fp_shop_manager_v2,1,1,1,0
access_fp_capa_manager,fp.capa.manager,model_fusion_plating_capa,fusion_plating.group_fp_manager,1,1,1,1
access_fp_capa_manager,fp.capa.manager,model_fusion_plating_capa,fusion_plating.group_fp_manager,1,0,0,0
access_fp_capa_qm,fp.capa.qm,model_fusion_plating_capa,fusion_plating.group_fp_quality_manager,1,1,1,1
access_fp_cal_equipment_operator,fp.cal.equipment.operator,model_fusion_plating_calibration_equipment,fusion_plating.group_fp_technician,1,0,0,0
access_fp_cal_equipment_supervisor,fp.cal.equipment.supervisor,model_fusion_plating_calibration_equipment,fusion_plating.group_fp_shop_manager_v2,1,1,1,0
access_fp_cal_equipment_manager,fp.cal.equipment.manager,model_fusion_plating_calibration_equipment,fusion_plating.group_fp_manager,1,1,1,1
@@ -13,19 +14,23 @@ access_fp_cal_event_supervisor,fp.cal.event.supervisor,model_fusion_plating_cali
access_fp_cal_event_manager,fp.cal.event.manager,model_fusion_plating_calibration_event,fusion_plating.group_fp_manager,1,1,1,1
access_fp_avl_operator,fp.avl.operator,model_fusion_plating_avl,fusion_plating.group_fp_technician,1,0,0,0
access_fp_avl_supervisor,fp.avl.supervisor,model_fusion_plating_avl,fusion_plating.group_fp_shop_manager_v2,1,1,1,0
access_fp_avl_manager,fp.avl.manager,model_fusion_plating_avl,fusion_plating.group_fp_manager,1,1,1,1
access_fp_avl_manager,fp.avl.manager,model_fusion_plating_avl,fusion_plating.group_fp_manager,1,0,0,0
access_fp_avl_qm,fp.avl.qm,model_fusion_plating_avl,fusion_plating.group_fp_quality_manager,1,1,1,1
access_fp_customer_spec_operator,fp.customer.spec.operator,model_fusion_plating_customer_spec,fusion_plating.group_fp_technician,1,0,0,0
access_fp_customer_spec_supervisor,fp.customer.spec.supervisor,model_fusion_plating_customer_spec,fusion_plating.group_fp_shop_manager_v2,1,1,1,0
access_fp_customer_spec_manager,fp.customer.spec.manager,model_fusion_plating_customer_spec,fusion_plating.group_fp_manager,1,1,1,1
access_fp_customer_spec_manager,fp.customer.spec.manager,model_fusion_plating_customer_spec,fusion_plating.group_fp_manager,1,0,0,0
access_fp_customer_spec_qm,fp.customer.spec.qm,model_fusion_plating_customer_spec,fusion_plating.group_fp_quality_manager,1,1,1,1
access_fp_audit_operator,fp.audit.operator,model_fusion_plating_audit,fusion_plating.group_fp_technician,1,0,0,0
access_fp_audit_supervisor,fp.audit.supervisor,model_fusion_plating_audit,fusion_plating.group_fp_shop_manager_v2,1,1,1,0
access_fp_audit_manager,fp.audit.manager,model_fusion_plating_audit,fusion_plating.group_fp_manager,1,1,1,1
access_fp_audit_manager,fp.audit.manager,model_fusion_plating_audit,fusion_plating.group_fp_manager,1,0,0,0
access_fp_audit_qm,fp.audit.qm,model_fusion_plating_audit,fusion_plating.group_fp_quality_manager,1,1,1,1
access_fp_fair_operator,fp.fair.operator,model_fusion_plating_fair,fusion_plating.group_fp_technician,1,0,0,0
access_fp_fair_supervisor,fp.fair.supervisor,model_fusion_plating_fair,fusion_plating.group_fp_shop_manager_v2,1,1,1,0
access_fp_fair_manager,fp.fair.manager,model_fusion_plating_fair,fusion_plating.group_fp_manager,1,1,1,1
access_fp_doc_control_operator,fp.doc.control.operator,model_fusion_plating_doc_control,fusion_plating.group_fp_technician,1,0,0,0
access_fp_doc_control_supervisor,fp.doc.control.supervisor,model_fusion_plating_doc_control,fusion_plating.group_fp_shop_manager_v2,1,1,1,0
access_fp_doc_control_manager,fp.doc.control.manager,model_fusion_plating_doc_control,fusion_plating.group_fp_manager,1,1,1,1
access_fp_doc_control_manager,fp.doc.control.manager,model_fusion_plating_doc_control,fusion_plating.group_fp_manager,1,0,0,0
access_fp_doc_control_qm,fp.doc.control.qm,model_fusion_plating_doc_control,fusion_plating.group_fp_quality_manager,1,1,1,1
access_fp_quality_hold_operator,fp.quality.hold.operator,model_fusion_plating_quality_hold,fusion_plating.group_fp_technician,1,0,1,0
access_fp_quality_hold_supervisor,fp.quality.hold.supervisor,model_fusion_plating_quality_hold,fusion_plating.group_fp_shop_manager_v2,1,1,1,0
access_fp_quality_hold_manager,fp.quality.hold.manager,model_fusion_plating_quality_hold,fusion_plating.group_fp_manager,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
4 access_fp_ncr_manager fp.ncr.manager model_fusion_plating_ncr fusion_plating.group_fp_manager 1 1 1 1
5 access_fp_capa_operator fp.capa.operator model_fusion_plating_capa fusion_plating.group_fp_technician 1 0 0 0
6 access_fp_capa_supervisor fp.capa.supervisor model_fusion_plating_capa fusion_plating.group_fp_shop_manager_v2 1 1 1 0
7 access_fp_capa_manager fp.capa.manager model_fusion_plating_capa fusion_plating.group_fp_manager 1 1 0 1 0 1 0
8 access_fp_capa_qm fp.capa.qm model_fusion_plating_capa fusion_plating.group_fp_quality_manager 1 1 1 1
9 access_fp_cal_equipment_operator fp.cal.equipment.operator model_fusion_plating_calibration_equipment fusion_plating.group_fp_technician 1 0 0 0
10 access_fp_cal_equipment_supervisor fp.cal.equipment.supervisor model_fusion_plating_calibration_equipment fusion_plating.group_fp_shop_manager_v2 1 1 1 0
11 access_fp_cal_equipment_manager fp.cal.equipment.manager model_fusion_plating_calibration_equipment fusion_plating.group_fp_manager 1 1 1 1
14 access_fp_cal_event_manager fp.cal.event.manager model_fusion_plating_calibration_event fusion_plating.group_fp_manager 1 1 1 1
15 access_fp_avl_operator fp.avl.operator model_fusion_plating_avl fusion_plating.group_fp_technician 1 0 0 0
16 access_fp_avl_supervisor fp.avl.supervisor model_fusion_plating_avl fusion_plating.group_fp_shop_manager_v2 1 1 1 0
17 access_fp_avl_manager fp.avl.manager model_fusion_plating_avl fusion_plating.group_fp_manager 1 1 0 1 0 1 0
18 access_fp_avl_qm fp.avl.qm model_fusion_plating_avl fusion_plating.group_fp_quality_manager 1 1 1 1
19 access_fp_customer_spec_operator fp.customer.spec.operator model_fusion_plating_customer_spec fusion_plating.group_fp_technician 1 0 0 0
20 access_fp_customer_spec_supervisor fp.customer.spec.supervisor model_fusion_plating_customer_spec fusion_plating.group_fp_shop_manager_v2 1 1 1 0
21 access_fp_customer_spec_manager fp.customer.spec.manager model_fusion_plating_customer_spec fusion_plating.group_fp_manager 1 1 0 1 0 1 0
22 access_fp_customer_spec_qm fp.customer.spec.qm model_fusion_plating_customer_spec fusion_plating.group_fp_quality_manager 1 1 1 1
23 access_fp_audit_operator fp.audit.operator model_fusion_plating_audit fusion_plating.group_fp_technician 1 0 0 0
24 access_fp_audit_supervisor fp.audit.supervisor model_fusion_plating_audit fusion_plating.group_fp_shop_manager_v2 1 1 1 0
25 access_fp_audit_manager fp.audit.manager model_fusion_plating_audit fusion_plating.group_fp_manager 1 1 0 1 0 1 0
26 access_fp_audit_qm fp.audit.qm model_fusion_plating_audit fusion_plating.group_fp_quality_manager 1 1 1 1
27 access_fp_fair_operator fp.fair.operator model_fusion_plating_fair fusion_plating.group_fp_technician 1 0 0 0
28 access_fp_fair_supervisor fp.fair.supervisor model_fusion_plating_fair fusion_plating.group_fp_shop_manager_v2 1 1 1 0
29 access_fp_fair_manager fp.fair.manager model_fusion_plating_fair fusion_plating.group_fp_manager 1 1 1 1
30 access_fp_doc_control_operator fp.doc.control.operator model_fusion_plating_doc_control fusion_plating.group_fp_technician 1 0 0 0
31 access_fp_doc_control_supervisor fp.doc.control.supervisor model_fusion_plating_doc_control fusion_plating.group_fp_shop_manager_v2 1 1 1 0
32 access_fp_doc_control_manager fp.doc.control.manager model_fusion_plating_doc_control fusion_plating.group_fp_manager 1 1 0 1 0 1 0
33 access_fp_doc_control_qm fp.doc.control.qm model_fusion_plating_doc_control fusion_plating.group_fp_quality_manager 1 1 1 1
34 access_fp_quality_hold_operator fp.quality.hold.operator model_fusion_plating_quality_hold fusion_plating.group_fp_technician 1 0 1 0
35 access_fp_quality_hold_supervisor fp.quality.hold.supervisor model_fusion_plating_quality_hold fusion_plating.group_fp_shop_manager_v2 1 1 1 0
36 access_fp_quality_hold_manager fp.quality.hold.manager model_fusion_plating_quality_hold fusion_plating.group_fp_manager 1 1 1 1