From 97a69e09021244e994602ac5038b4bd7bc16ba78 Mon Sep 17 00:00:00 2001 From: tv Date: Mon, 9 Nov 2026 04:44:36 +0000 Subject: access: `*` for any one key in a capability's path A capability's path covered by prefix only, so what is the same at every key of a map (each node's log filter, say, at `_continuum/local//log` from the next patch on) took a capability per key. Now a `*` segment stands for any one key, as it already does in signed paths and sealed places (`envelope`, `sealed`, which now share one `agree`): * covering (`Capability::covers`): the pattern no longer than the path, and agreeing with it segment by segment; * listings (`reaches`): pattern and path agreeing on the segments both have, so every key on the way shows, nothing past where the pattern differs; * narrowing (`Capability::holds`, for a token's limit narrowed again and a refresh's): at or below, a `*` only under a `*`: a limit naming one key never widens to all. A `*` first is outside protocol data, so it never covers `_continuum`, as `[]` doesn't. A key that is `*` itself can't be named alone. Every node judges changes by capabilities, so all must read them alike: they run the same version. --- docs/access.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'docs/access.md') diff --git a/docs/access.md b/docs/access.md index 7392bb9..c639d0d 100644 --- a/docs/access.md +++ b/docs/access.md @@ -20,9 +20,11 @@ password hashes: every member reads the document). * **Names** are what `--htpasswd` and the proxy give: 1 to 64 of `A-Z a-z 0-9 . _ @ -`. * **Capabilities** (`caps`): each a path, as segments as the store's API takes them, and the rights it gives there and below: `read`, `write`. A capability covers its - path segment by segment (`servers/eu` covers `servers/eu/0`, not `servers/europe`). - One outside protocol data never covers protocol data: `[]` is all of the swarm's - data, `["_continuum"]` protocol data, managing users included (`_continuum/users`). + path segment by segment (`servers/eu` covers `servers/eu/0`, not `servers/europe`), + `*` for any one key (`servers/*/name` covers `servers/eu/name` and `servers/us/name`; + a key that is `*` itself can't be named alone). One outside protocol data never + covers protocol data, nor one with `*` first: `[]` is all of the swarm's data, + `["_continuum"]` protocol data, managing users included (`_continuum/users`). They are kept by a random ID, so two capabilities granted at once both hold, and revoking one removes it alone. Each names who granted it (`by`: a user as `user:`, or the node that recorded it) and when (`since`). -- cgit v1.3.1