feat(server): grant-scope org attachment write paths in pre-receive hook
This commit is contained in:
@@ -111,10 +111,11 @@ before they land.
|
||||
rejected outright.
|
||||
|
||||
2. **Path-level write authorisation** — each modified path is classified by
|
||||
`classify_path` (`crates/relicario-server/src/lib.rs:19`) into
|
||||
`ProtectedJson` (owner/admin write only), `CollectionItem` (the
|
||||
`items/<slug>/…` prefix; write allowed only if the slug appears in the
|
||||
signer's `collections` grant array), or `Unrestricted`. The write is
|
||||
`classify_path` (`crates/relicario-server/src/lib.rs:20`) into
|
||||
`Protected` (owner/admin write only), `Item { collection }` (the
|
||||
`items/<slug>/…` or `attachments/<slug>/…` prefix; write allowed only if
|
||||
the slug appears in the signer's `collections` grant array), or
|
||||
`Unrestricted`. The write is
|
||||
authorised if and only if the signer's role and grants satisfy the
|
||||
classification. Item blobs are authorised by the leading path segment
|
||||
alone — the ciphertext is never decrypted by the hook.
|
||||
@@ -132,6 +133,21 @@ before they land.
|
||||
Merge commits are rejected. A genesis commit (no parents) is allowed
|
||||
only when it is signed by the sole Owner it introduces.
|
||||
|
||||
#### Attachment write authorisation (v0.1.1 fix)
|
||||
|
||||
Prior to `relicario-server` v0.1.1, `attachments/…` paths fell through to
|
||||
`PathClass::Unrestricted` in `classify_path`
|
||||
(`crates/relicario-server/src/lib.rs:20`). Any member with push access could
|
||||
write attachment blobs to any collection regardless of their grants. As of
|
||||
v0.1.1, `attachments/<slug>/<item-id>/<att-id>.enc` is classified as
|
||||
`PathClass::Item { collection: slug }`, bringing attachment writes under the
|
||||
same grant check already applied to `items/<slug>/<id>.enc` blobs.
|
||||
|
||||
**Deploying this fix requires rebuilding and redeploying the pre-receive hook
|
||||
on the server.** A server still running a hook built before v0.1.1 continues
|
||||
to accept attachment pushes from any member; the `Unrestricted` path is only
|
||||
closed once the updated hook is installed at `<repo>/hooks/pre-receive`.
|
||||
|
||||
### Key rotation
|
||||
|
||||
`relicario org rotate-key` generates a fresh 256-bit org master key,
|
||||
|
||||
Reference in New Issue
Block a user