69 lines
3.1 KiB
JavaScript
69 lines
3.1 KiB
JavaScript
/// <reference path="../pb_data/types.d.ts" />
|
|
//
|
|
// 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);
|
|
}
|
|
}
|
|
);
|