aboutsummaryrefslogtreecommitdiffstats
path: root/docs/access.md
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-11-09 04:46:19 +0000
committertv <tv@krebsco.de>2026-11-09 05:48:17 +0100
commit98a9180e39742725a61fb1966e342d7d212beee9 (patch)
treecc4b8b5b8a1f022a00e5b46e2f849a3edc72301d /docs/access.md
parent97a69e09021244e994602ac5038b4bd7bc16ba78 (diff)
access: what a node holds alone by `_continuum/local/<node ID>/<name>`
Setting a node's log filter took `write` on `_continuum`, all of the protocol data: whoever could change one node's logging could change the swarm's members, remakes and users too. Now what a node holds alone has paths of its own for capabilities, under `_continuum/local/<node ID>/`: `log` (`/admin/log`), `config` (`/admin/config`) and `debug` (`/debug`, always `write`), `read` to look and `write` to act (`api::access::needed`, which takes the node's ID). So `_continuum/local/<node ID>` is everything on one node, `_continuum/local/*/log` the log filter on every node, and holders of `_continuum` keep it all. Nothing is stored there: the store refuses writes under `_continuum/local`, and the rules refuse a change touching it, as for epoch metadata. The quarantine stays with `_continuum`: its entries are everyone's writes, which a node-local capability mustn't show.
Diffstat (limited to 'docs/access.md')
-rw-r--r--docs/access.md14
1 files changed, 10 insertions, 4 deletions
diff --git a/docs/access.md b/docs/access.md
index c639d0d..a4c5375 100644
--- a/docs/access.md
+++ b/docs/access.md
@@ -81,9 +81,15 @@ change to it counts on a node as soon as it has reached it.
* **Remakes** (`/admin/remakes`): `read` on `_continuum/remakes` to look, `write` to
propose or abort one. **Forgetting a peer** (`DELETE /peers/…`): `write` on
`_continuum/forgotten`.
-* **Everything else an operator does** (`/admin/config`, `/admin/log`,
- `/admin/document`, `/admin/changes`, `/admin/epochs`, `/admin/quarantine`, `/debug`):
- `read` on `_continuum` to look, `write` on it to act.
+* **What a node holds alone** (its log filter, `/admin/log`; its configuration,
+ `/admin/config`; `/debug`): `read` to look and `write` to act on
+ `_continuum/local/<node ID>/log`, `…/config`, `…/debug` (`/debug` always `write`).
+ Nothing is stored there, and nothing may be written there: the paths only name these
+ for capabilities. `_continuum/local/<node ID>` is everything on one node,
+ `_continuum/local/*/log` the log filter on every node.
+* **Everything else an operator does** (`/admin/document`, `/admin/changes`,
+ `/admin/epochs`, `/admin/quarantine`): `read` on `_continuum` to look, `write` on it
+ to act.
A user the node lets in but the registry doesn't have may do nothing (`403`).
@@ -248,7 +254,7 @@ stays as it is, wherever it comes from later (a joining node catching up, say).
the dashboard right); removed also by one who forgets the member in the same change (`DELETE
/peers/{pk}`, with `_continuum/forgotten`). Its votes by that member only.
* Epochs and the swarm ID (`_continuum/epochs`, `_continuum/swarm`) by an epoch's first
- change only (the genesis change, a remake's snapshot).
+ change only (the genesis change, a remake's snapshot). `_continuum/local` by none.
* A remake's record and its proposal by whichever member proposes, where there are
none; its decision by the coordinator its proposal names, or a user who may write
there (an operator aborting an expired remake through any member, `DELETE