initial commit
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
/// <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);
|
||||
}
|
||||
}
|
||||
);
|
||||
Reference in New Issue
Block a user