Authorization

Collection access rules

Define list, view, create, update and delete independently. Rules execute on the server for application users and service identities.

Owner-only issues

{
  "list": "actor.id != ''",
  "view": "owner_id = actor.id",
  "create": "actor.id != ''",
  "update": "owner_id = actor.id",
  "delete": "owner_id = actor.id"
}

Set these values in Settings → Collection access rules, save, then use the simulator with representative actors and record values. List rules authorize the operation; returned rows are still constrained by the rule’s record-aware predicate where applicable.

Public catalogue

{"list":"true","view":"true","create":"false","update":"false","delete":"false"}

Service-managed records

{"list":"actor.kind = 'service'","view":"actor.kind = 'service'",
 "create":"actor.kind = 'service'","update":"actor.kind = 'service'","delete":"false"}

A service must also possess the matching bearer scope. Rules can narrow a scope but cannot manufacture one.

Failure behavior

Individual view/update/delete denials avoid revealing whether a record exists. UI state is never an authorization boundary, and simulator output is diagnostic rather than a substitute for a real request test.

Provider storage

Rules are stored in collection metadata and evaluated server-side before any provider detail is exposed; the same authorization decision results on SQLite and the PostgreSQL provider. A denied record is indistinguishable from a missing record, and rule simulation is administrator-only.