Bootstrap: bestehende Berechtigungen angleichen statt überspringen
ensurePermission brach ab, sobald für eine Collection bereits ein Berechtigungseintrag existierte. Dadurch blieben einmal angelegte, zu enge Feldlisten dauerhaft bestehen und spätere Erweiterungen kamen nie an -- der Produktions-Agent lief deshalb in 403-Fehler beim Zurückschreiben von jobs.status und orders.production_status. Vorhandene Einträge werden jetzt per PATCH auf die im Bootstrap definierten Felder und Filter nachgezogen. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -743,10 +743,28 @@ async function ensureAccess(roleId, policyId) {
|
||||
await api('POST', '/access', { role: roleId, policy: policyId });
|
||||
log('access +', `${roleId || 'public'} ↔ policy`);
|
||||
}
|
||||
/**
|
||||
* Legt eine Berechtigung an ODER gleicht eine bestehende an.
|
||||
*
|
||||
* Wichtig: Früher wurde ein vorhandener Eintrag unangetastet gelassen. Dadurch
|
||||
* blieben einmal angelegte, zu enge Feldlisten für immer bestehen – spätere
|
||||
* Erweiterungen (z. B. production_status für den Produktions-Agent) kamen nie
|
||||
* an und führten zu 403-Fehlern. Der Bootstrap ist die Quelle der Wahrheit,
|
||||
* deshalb werden Felder und Filter jetzt aktiv nachgezogen.
|
||||
*/
|
||||
async function ensurePermission(policyId, collection, action, fields = ['*'], permissions = {}) {
|
||||
const existing = await api('GET',
|
||||
`/permissions?filter[policy][_eq]=${policyId}&filter[collection][_eq]=${collection}&filter[action][_eq]=${action}&limit=1`);
|
||||
if (existing && existing.length) return;
|
||||
`/permissions?filter[policy][_eq]=${policyId}&filter[collection][_eq]=${collection}&filter[action][_eq]=${action}&limit=1&fields=id,fields,permissions`);
|
||||
if (existing && existing.length) {
|
||||
const cur = existing[0];
|
||||
const gleich = JSON.stringify(cur.fields ?? null) === JSON.stringify(fields)
|
||||
&& JSON.stringify(cur.permissions ?? {}) === JSON.stringify(permissions);
|
||||
if (!gleich) {
|
||||
await api('PATCH', `/permissions/${cur.id}`, { fields, permissions });
|
||||
log('perm ~', `${collection}.${action}`);
|
||||
}
|
||||
return;
|
||||
}
|
||||
await api('POST', '/permissions', { policy: policyId, collection, action, fields, permissions, validation: {} });
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user