/// // // M15 — Widen repairOrders rules for technician viewing and // technicianAssignments createRule for technician self-assignment. // // repairOrders: // Previously: userId = @request.auth.id (M4 rule) // Now: userId = @request.auth.id || (userId = @request.auth.shopUserId && @request.auth.role = 'technician') // This lets technicians list/view their shop's active repair orders. // // technicianAssignments: // Previously: shopUserId = @request.auth.id (M11 rule) // Now: shopUserId = @request.auth.id || (shopUserId = @request.auth.shopUserId && @request.auth.role = 'technician') // This lets technicians create assignment records for self-claimed jobs. migrate( (db) => { // ── repairOrders: widen listRule and viewRule ────────────────────────── const roCol = db.findCollectionByNameOrId('repairOrders'); if (roCol) { const techRule = "(userId = @request.auth.shopUserId && @request.auth.role = 'technician')"; const current = roCol.listRule; // Only apply if the widened rule isn't already set (idempotent) if (current !== 'userId = @request.auth.id' && current?.includes('technician')) { console.log('[M15] repairOrders already widened — no change'); } else { roCol.listRule = `userId = @request.auth.id || ${techRule}`; roCol.viewRule = `userId = @request.auth.id || ${techRule}`; db.save(roCol); console.log('[M15] widened repairOrders listRule/viewRule for technician access'); } } else { console.warn('[M15] repairOrders collection not found — skipping'); } // ── technicianAssignments: widen createRule ───────────────────────────── const taCol = db.findCollectionByNameOrId('technicianAssignments'); if (taCol) { const techCreateRule = "(shopUserId = @request.auth.shopUserId && @request.auth.role = 'technician')"; const current = taCol.createRule; if (current !== 'shopUserId = @request.auth.id' && current?.includes('technician')) { console.log('[M15] technicianAssignments createRule already widened — no change'); } else { taCol.createRule = `shopUserId = @request.auth.id || ${techCreateRule}`; db.save(taCol); console.log('[M15] widened technicianAssignments createRule for technician self-assignment'); } } else { console.warn('[M15] technicianAssignments collection not found — skipping'); } }, (db) => { // Rollback: restore M4 rules for repairOrders const roCol = db.findCollectionByNameOrId('repairOrders'); if (roCol) { roCol.listRule = 'userId = @request.auth.id'; roCol.viewRule = 'userId = @request.auth.id'; db.save(roCol); } // Rollback: restore M11 rule for technicianAssignments const taCol = db.findCollectionByNameOrId('technicianAssignments'); if (taCol) { taCol.createRule = 'shopUserId = @request.auth.id'; db.save(taCol); } } );