From 12466d4b83455b546212f6f75754d3ea9301a35b Mon Sep 17 00:00:00 2001 From: Edouard Vanbelle Date: Sun, 24 May 2026 23:06:16 +0200 Subject: [PATCH] feat(roles): simplify roles to only Viewer, Editor, Admin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ┌────────┬──────┬─────────┬────────┬────────┬───────┬────────┐ │ Role │ read │ comment │ create │ update │ share │ delete │ ├────────┼──────┼─────────┼────────┼────────┼───────┼────────┤ │ viewer │ ✓ │ │ │ │ │ │ ├────────┼──────┼─────────┼────────┼────────┼───────┼────────┤ │ editor │ ✓ │ ✓ │ ✓ │ ✓ │ │ │ ├────────┼──────┼─────────┼────────┼────────┼───────┼────────┤ │ admin │ ✓ │ ✓ │ ✓ │ ✓ │ ✓ │ ✓ │ └────────┴──────┴─────────┴────────┴────────┴───────┴────────┘ --- src/application/dtos/grant_dto.rs | 8 ++++++-- tests/api/grants.hurl | 10 +++++----- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/application/dtos/grant_dto.rs b/src/application/dtos/grant_dto.rs index 71d0d8de..23553a0c 100644 --- a/src/application/dtos/grant_dto.rs +++ b/src/application/dtos/grant_dto.rs @@ -133,9 +133,9 @@ impl From for PermissionDto { #[serde(rename_all = "lowercase")] pub enum Role { Viewer, - Commenter, + //Commenter, Editor, - Manager, + //Manager, Admin, } @@ -146,13 +146,16 @@ impl Role { pub fn expand(self) -> &'static [Permission] { match self { Role::Viewer => &[Permission::Read], + /* reserved for future Role::Commenter => &[Permission::Read, Permission::Comment], + */ Role::Editor => &[ Permission::Read, Permission::Comment, Permission::Create, Permission::Update, ], + /* reserved for future Role::Manager => &[ Permission::Read, Permission::Comment, @@ -160,6 +163,7 @@ impl Role { Permission::Update, Permission::Share, ], + */ Role::Admin => &[ Permission::Read, Permission::Comment, diff --git a/tests/api/grants.hurl b/tests/api/grants.hurl index 766d397d..a10ba6f1 100644 --- a/tests/api/grants.hurl +++ b/tests/api/grants.hurl @@ -150,7 +150,7 @@ jsonpath "$[?(@.resource.id=='{{shared_folder_id}}')].permission" == "read" # ───────────────────────────────────────────────────────────── -# Step 9 — Promote Bob to Manager (adds comment, create, update, share). +# Step 9 — Promote Bob to Admin (adds comment, create, update, share, delete). # PUT /api/grants/role reconciles the row set in one call. # ───────────────────────────────────────────────────────────── PUT {{base_url}}/api/grants/role @@ -159,12 +159,12 @@ Content-Type: application/json { "subject": { "type": "user", "id": "{{dave_user_id}}" }, "resource": { "type": "folder", "id": "{{shared_folder_id}}" }, - "role": "manager" + "role": "admin" } HTTP 200 [Asserts] -jsonpath "$" count == 5 +jsonpath "$" count == 6 # ───────────────────────────────────────────────────────────── @@ -173,7 +173,7 @@ jsonpath "$" count == 5 PUT {{base_url}}/api/folders/{{shared_folder_id}}/rename Authorization: Bearer {{dave_token}} Content-Type: application/json -{ "name": "renamed-by-bob-as-manager" } +{ "name": "renamed-by-bob-as-admin" } HTTP 200 @@ -192,7 +192,7 @@ HTTP 200 # ───────────────────────────────────────────────────────────── -# Step 12 — Bob re-shares to Carol (he has Share via Manager). +# Step 12 — Bob re-shares to Carol (he has Share via Admin). # ───────────────────────────────────────────────────────────── POST {{base_url}}/api/grants Authorization: Bearer {{dave_token}}