feat(12.1-01): cabana.ForbiddenError answers a refused write with 403

- hooks and bulk, record, toolbar and widget actions may return it
- 403 forbidden with the localized message and field details; the write's
  transaction is rolled back; other errors stay the opaque 500
- form shows a refused save as a persistent banner and keeps the values;
  a refused delete is a toast
- smoke tests, OpenAPI notes, dist, README, docs
This commit is contained in:
Jakub Zych
2026-10-04 23:53:34 +02:00
parent 61d5fc72ad
commit 71073bc8a2
23 changed files with 486 additions and 48 deletions

View File

@@ -737,7 +737,7 @@ export interface paths {
"application/json": components["schemas"]["cabana.ErrorEnvelope"];
};
};
/** @description Forbidden */
/** @description also returned when controller code refuses the write; details may name fields */
403: {
headers: {
[name: string]: unknown;
@@ -821,7 +821,7 @@ export interface paths {
"application/json": components["schemas"]["cabana.ErrorEnvelope"];
};
};
/** @description Forbidden */
/** @description also returned when controller code refuses the write; details may name fields */
403: {
headers: {
[name: string]: unknown;
@@ -919,7 +919,7 @@ export interface paths {
"application/json": components["schemas"]["cabana.ErrorEnvelope"];
};
};
/** @description Forbidden */
/** @description also returned when controller code refuses the write; details may name fields */
403: {
headers: {
[name: string]: unknown;
@@ -1709,7 +1709,7 @@ export interface paths {
"application/json": components["schemas"]["cabana.ErrorEnvelope"];
};
};
/** @description Forbidden */
/** @description also returned when controller code refuses the write; details may name fields */
403: {
headers: {
[name: string]: unknown;
@@ -1776,7 +1776,7 @@ export interface paths {
"application/json": components["schemas"]["cabana.ErrorEnvelope"];
};
};
/** @description Forbidden */
/** @description also returned when controller code refuses the write; details may name fields */
403: {
headers: {
[name: string]: unknown;
@@ -1866,7 +1866,7 @@ export interface paths {
"application/json": components["schemas"]["cabana.ErrorEnvelope"];
};
};
/** @description Forbidden */
/** @description also returned when controller code refuses the write; details may name fields */
403: {
headers: {
[name: string]: unknown;