feat: global blocked_doctypes list (block doctypes not on /desk)

desk_layout._build merges a top-level config 'blocked_doctypes' list into the
blocked-doctype set, so arbitrary doctypes (including ones absent from any
workspace card) are denied at before_request + has_permission when enforcing.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Ali 2026-06-21 09:58:43 +00:00
parent acb1010324
commit 20e7e834c2
1 changed files with 5 additions and 0 deletions

View File

@ -201,6 +201,11 @@ def _build_inner() -> dict:
elif ltype == "Page": elif ltype == "Page":
blocked_pages.add(lto) blocked_pages.add(lto)
# Global block list — doctypes blocked anywhere, including ones not on /desk.
for dt in layout.get("blocked_doctypes") or []:
if isinstance(dt, str) and dt:
blocked_doctypes.add(dt)
return { return {
"workspaces": workspaces, "workspaces": workspaces,
"hidden_ws": frozenset(hidden_ws), "hidden_ws": frozenset(hidden_ws),