Skip to content

Row-safe custom endpoints and reports

View as Markdown

Generated table routes apply action checks and row visibility automatically. Application code must choose those boundaries explicitly.

BoundaryQuestionMechanism
CredentialWho is calling, and in which workspace?Session or agent token
Action abilityMay this principal run the operation?forbidUnless(...) or an authorized project helper
Data authorityWhich workspace/user authority may the request exercise?Request data-authority resolution and narrowing
Row enforcementWhich rows satisfy table and domain predicates?scopedRows(...), table guards, and ownedRows(...)
Write integrityWhich fields must trusted server code author?Managed fields and serverValues
State transitionWhich changes commit together?A synchronous database transaction

Passing one boundary does not imply another. A valid ID, hidden input, URL filter, report link, or Grid state never grants authority.

Every route still checks its action before using a row helper. Each table in a custom query or transaction needs its own guard.