diff options
| author | tv <tv@krebsco.de> | 2026-11-07 22:35:21 +0100 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-11-07 22:35:21 +0100 |
| commit | d7a6bc3ed201ff2ca953f74f62154e5e17728f22 (patch) | |
| tree | ab5c1e4ebfab500539f313b8e8bebf95a6edf29e /src/document | |
| parent | cc691bade836d27d02bb2330f0fa323a1d88a1bb (diff) | |
access: rules by path
access::rules::judge: a change judged as its writer saw the document
(at its dependencies): committer a member or registering itself;
members' entries and votes their own; epochs and swarm ID from roots;
a remake's decision by its coordinator; the rest by the registry for
the user the change names.
Auth plan M6.
Diffstat (limited to 'src/document')
| -rw-r--r-- | src/document/meta.rs | 2 | ||||
| -rw-r--r-- | src/document/signatures.rs | 4 |
2 files changed, 4 insertions, 2 deletions
diff --git a/src/document/meta.rs b/src/document/meta.rs index 0c3ee89..5966b3c 100644 --- a/src/document/meta.rs +++ b/src/document/meta.rs @@ -16,6 +16,7 @@ //! writer if need be (`swarm::topology::swarm_ways`). //! * `users/<name>`: the user registry: who the users are, and what each may do //! (`access::registry`). +//! * `access/signed`: the paths whose writes are signed (`document::signatures`). /// The key every protocol path starts with. pub(crate) const ROOT: &str = "_continuum"; @@ -30,6 +31,7 @@ pub(crate) const RELAYS: &str = "relays"; pub(crate) const TOPOLOGY: &str = "topology"; pub(crate) const DISSEMINATION: &str = "dissemination"; pub(crate) const USERS: &str = "users"; +pub(crate) const ACCESS: &str = "access"; /// The store path `_continuum/<parts…>`. pub(crate) fn path(parts: &[&str]) -> Vec<String> { diff --git a/src/document/signatures.rs b/src/document/signatures.rs index d347e10..47e5917 100644 --- a/src/document/signatures.rs +++ b/src/document/signatures.rs @@ -24,7 +24,7 @@ use super::{ChangeHash, Document}; /// Where the swarm lists the paths whose writes are signed: a list of paths, each a /// list of segments, as capabilities name them (`access.md`). -pub(crate) const SIGNED_PATHS: [&str; 3] = ["_continuum", "access", "signed"]; +pub(crate) const SIGNED_PATHS: [&str; 3] = [super::meta::ROOT, super::meta::ACCESS, "signed"]; /// What a signature is made over: a domain, then the change's hash. pub(crate) fn message(hash: &ChangeHash) -> Vec<u8> { @@ -50,7 +50,7 @@ impl Sign { Sign::Protocol => true, Sign::Write { path, asked } => { *asked - || path.first().map(String::as_str) == Some(SIGNED_PATHS[0]) + || super::meta::is_protocol(path) || listed(doc).iter().any(|signed| related(signed, path)) } } |
