A registered participant that votes to suppress (or lock) an artifact, pre-data, leaving the family's transformer untouched (introduced for the dashboard in Core Dashboard API v1.0 — see {@see https://laravelui5.com/core/backend/dashboard#visibility-the-veto-chain}).
A vetoer answers one question about one artifact — "should this render,
for this actor, right now?" — and nothing else. It knows neither the
other vetoers nor the tree. The {@see \LaravelUi5\Core\Ui5\Emit\Veto\VetoChain}
composes all registered vetoers by union ({@see Disposition}), so
N concerns (access, lifecycle, personalization) never coordinate:
any one Hide prunes the artifact.
Registration is by container tag, not by subclassing the
transformer. Each contributing package tags its vetoer with this
interface's FQCN; Core builds the chain from app()->tagged(...).
A Core-only app tags nothing → the chain is empty → every artifact is
Shown (the no-op default). The canonical first consumer is the
portal's PortalLifecycleVetoer (tier/state gating); the SDK's
AccessVetoer joins the same chain when SDK access work lands.
Scope is pre-data, server-side only. "No data to display" is not a veto reason here: a card's data lives behind its lazily-fetched endpoint, unknowable at build time — empty-card suppression is a separate, deferred concern (the card endpoint is its enforcement site).
Extrinsic policy only. This contract is for external participants; a Core artifact must not implement it to gate itself on SDK/host policy (that would leak cross-layer concerns into a BSL Core artifact).
| Methods | ||
|---|---|---|
public
|
dispose(Ui5ArtifactInterface $artifact, Ui5ContextInterface $context): Disposition
|
# |