fs
f9c09f8746
refactor(actions): introduce action-context helpers (step 1)
...
Six orthogonal building blocks plus three cluster aggregators in
core/Support/helpers/action_context.php, preparing consolidation of the
~40-60 line vorspiel duplicated across edit/create/view-fragment actions.
Step 1 of a planned 3-step rollout: no production call sites yet —
pages/ and modules/ are untouched. Architecture tests freeze the
building-block signatures and verify drawer-fragment AuthZ parity.
GR-SEC-009 is structurally enforced via the actionDeriveTenantScope
return shape (PHPStan array{scope: 'all'|'list', ids: list<int>});
'all' is unreachable without an explicit can_manage_all_tenants flag.
Aggregator docblocks carry a mandatory CSRF-pairing warning per
GR-SEC-001; actionBuildViewAuth flags the e()-escape obligation per
GR-SEC-010.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-25 23:08:52 +02:00
..
2026-03-19 19:00:29 +01:00
2026-03-19 18:30:14 +01:00
2026-04-25 23:08:52 +02:00
2026-04-14 07:54:02 +02:00
2026-04-24 19:00:13 +02:00
2026-03-19 18:52:36 +01:00
2026-03-19 18:52:36 +01:00
2026-04-05 16:32:34 +02:00
2026-04-01 19:41:56 +02:00
2026-03-19 18:52:36 +01:00
2026-04-13 23:20:42 +02:00
2026-04-13 23:20:42 +02:00
2026-04-13 23:20:42 +02:00
2026-03-18 22:19:56 +01:00
2026-04-06 22:22:17 +02:00
2026-03-19 19:13:51 +01:00
2026-03-22 14:15:41 +01:00
2026-04-14 07:54:02 +02:00
2026-03-19 19:05:29 +01:00
2026-04-25 21:16:26 +02:00
2026-04-25 21:16:26 +02:00
2026-03-19 19:12:25 +01:00
2026-03-19 19:12:25 +01:00
2026-03-19 19:12:25 +01:00
2026-03-19 19:12:25 +01:00
2026-03-19 19:12:25 +01:00
2026-03-19 18:25:19 +01:00
2026-04-25 08:50:05 +02:00
2026-04-24 20:25:53 +02:00
2026-03-19 18:25:19 +01:00
2026-04-25 21:37:09 +02:00
2026-03-26 08:13:37 +01:00
2026-04-13 23:20:42 +02:00
2026-04-24 20:25:53 +02:00
2026-04-25 08:50:05 +02:00
2026-04-14 07:54:02 +02:00
2026-03-19 18:52:36 +01:00
2026-03-19 18:52:36 +01:00
2026-03-19 18:52:36 +01:00
2026-03-19 18:52:36 +01:00
2026-04-24 16:15:10 +02:00
2026-03-26 12:33:59 +01:00
2026-04-24 19:10:37 +02:00
2026-04-14 07:54:02 +02:00
2026-03-18 22:19:56 +01:00
2026-03-10 15:40:07 +01:00
2026-04-25 08:50:05 +02:00
2026-03-19 19:03:10 +01:00
2026-03-19 19:03:10 +01:00
2026-03-19 19:03:10 +01:00
2026-04-25 23:08:52 +02:00
2026-04-25 08:50:05 +02:00
2026-03-19 19:04:28 +01:00
2026-03-19 19:04:28 +01:00
2026-03-19 19:04:28 +01:00
2026-03-19 19:02:04 +01:00
2026-03-19 19:02:04 +01:00
2026-03-19 19:02:04 +01:00
2026-03-19 19:02:04 +01:00
2026-04-13 23:20:42 +02:00
2026-04-22 15:22:26 +02:00
2026-03-19 19:59:08 +01:00
2026-04-22 15:37:26 +02:00
2026-04-20 23:01:54 +02:00
2026-04-23 23:52:32 +02:00
2026-04-25 11:50:04 +02:00
2026-04-23 23:52:32 +02:00
2026-04-25 19:32:09 +02:00
2026-04-13 23:20:42 +02:00
2026-04-01 19:41:56 +02:00
2026-03-19 18:25:19 +01:00
2026-04-04 18:34:03 +02:00
2026-04-02 17:48:27 +02:00
2026-04-21 22:50:43 +02:00
2026-04-21 22:50:43 +02:00
2026-04-20 22:54:19 +02:00
2026-03-26 08:13:37 +01:00
2026-03-19 19:29:45 +01:00
2026-03-26 08:13:37 +01:00
2026-03-19 18:30:14 +01:00
2026-03-19 18:57:03 +01:00
2026-04-01 19:41:56 +02:00
2026-04-14 12:54:20 +02:00
2026-04-01 19:41:56 +02:00
2026-03-19 18:30:14 +01:00
2026-03-26 15:06:15 +01:00
2026-03-19 19:00:29 +01:00
2026-03-22 14:15:41 +01:00
2026-04-14 12:54:20 +02:00
2026-04-22 15:37:26 +02:00
2026-04-24 17:59:57 +02:00
2026-03-10 21:20:08 +01:00
2026-03-10 21:20:08 +01:00
2026-03-19 18:48:16 +01:00
2026-03-19 18:48:16 +01:00
2026-04-13 23:20:42 +02:00
2026-04-13 23:20:42 +02:00
2026-04-14 07:54:02 +02:00
2026-04-05 23:20:55 +02:00
2026-04-13 23:20:42 +02:00
2026-03-25 21:12:49 +01:00
2026-04-01 19:41:56 +02:00
2026-04-13 23:20:42 +02:00
2026-04-21 22:20:39 +02:00
2026-03-19 19:11:03 +01:00
2026-03-19 19:11:03 +01:00
2026-03-19 19:11:03 +01:00
2026-03-19 19:11:03 +01:00
2026-03-26 08:13:37 +01:00
2026-03-24 20:49:22 +01:00
2026-03-22 14:15:41 +01:00
2026-04-06 12:08:25 +02:00