Enforce local KV write capabilities

This commit is contained in:
Eric Wendland 2026-05-18 04:06:41 +02:00
commit 5751748458
8 changed files with 118 additions and 10 deletions

View file

@ -795,6 +795,7 @@ fn kv_create_set_get_use_local_store() {
name: "prefs".to_owned(),
key: "apps/foo/theme".to_owned(),
value: "dark".to_owned(),
subject: None,
},
)
.expect("set kv");
@ -837,6 +838,51 @@ fn kv_create_set_get_use_local_store() {
other => panic!("unexpected response: {other:?}"),
}
assert!(
geth_node::handle_request(
&node,
geth_control::ControlRequest::KvSet {
name: "prefs".to_owned(),
key: "apps/foo/accent".to_owned(),
value: "blue".to_owned(),
subject: Some("node:tablet".to_owned()),
},
)
.is_err()
);
geth_node::handle_request(
&node,
geth_control::ControlRequest::AuthGrant {
subject: "node:tablet".to_owned(),
resource: "resource:kv:prefs".to_owned(),
capability: "kv.write_prefix:apps/foo/".to_owned(),
grant_id: None,
},
)
.expect("grant prefix write");
geth_node::handle_request(
&node,
geth_control::ControlRequest::KvSet {
name: "prefs".to_owned(),
key: "apps/foo/accent".to_owned(),
value: "blue".to_owned(),
subject: Some("node:tablet".to_owned()),
},
)
.expect("authorized prefix write");
assert!(
geth_node::handle_request(
&node,
geth_control::ControlRequest::KvSet {
name: "prefs".to_owned(),
key: "apps/bar/accent".to_owned(),
value: "red".to_owned(),
subject: Some("node:tablet".to_owned()),
},
)
.is_err()
);
assert!(
geth_node::handle_request(
&node,
@ -853,6 +899,7 @@ fn kv_create_set_get_use_local_store() {
name: "missing".to_owned(),
key: "apps/foo/theme".to_owned(),
value: "dark".to_owned(),
subject: None,
},
)
.is_err()