From ade4792eacbbce95da798a188a02f8fc2fd3838b Mon Sep 17 00:00:00 2001 From: maziggy Date: Sun, 1 Feb 2026 11:39:37 +0100 Subject: [PATCH] Add separate permission for AMS RFID re-read (Issue #204) - Add new `printers:ams_rfid` permission for re-reading AMS RFID tags - Allows granting RFID re-read access without full printer control - Operators group includes this permission by default - Previously used `printers:control` which grants broader access - Permission available in Settings > Users > Group Editor Closes #204 --- CHANGELOG.md | 5 +++++ backend/app/api/routes/printers.py | 2 +- backend/app/core/permissions.py | 3 +++ frontend/src/api/client.ts | 2 +- frontend/src/pages/PrintersPage.tsx | 16 ++++++++-------- .../{index-D56fK0KZ.js => index-1q7Yxq-H.js} | 2 +- static/index.html | 2 +- 7 files changed, 20 insertions(+), 12 deletions(-) rename static/assets/{index-D56fK0KZ.js => index-1q7Yxq-H.js} (99%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 35afcce2e..80d4847ae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,11 @@ All notable changes to Bambuddy will be documented in this file. - Shows username on archive cards, library files, queue items, and printer cards (while printing) - Works when authentication is enabled; gracefully hidden when auth is disabled - Database migration adds `created_by_id` columns to `print_archives`, `library_files`, and `print_queue` tables +- **Separate AMS RFID Permission** (Issue #204): + - Added new `printers:ams_rfid` permission for re-reading AMS RFID tags + - Allows granting RFID re-read access without full printer control permissions + - Operators group includes this permission by default + - Available in Settings > Users > Group Editor as a toggleable permission - **Schedule Button on Archive Cards** (Issue #208): - Added "Schedule" button next to "Reprint" on archive cards for quick access to print scheduling - Previously only available in the context menu (right-click) diff --git a/backend/app/api/routes/printers.py b/backend/app/api/routes/printers.py index ed1fe54fd..ca8bae616 100644 --- a/backend/app/api/routes/printers.py +++ b/backend/app/api/routes/printers.py @@ -1689,7 +1689,7 @@ async def refresh_ams_slot( printer_id: int, ams_id: int, slot_id: int, - _=RequirePermissionIfAuthEnabled(Permission.PRINTERS_CONTROL), + _=RequirePermissionIfAuthEnabled(Permission.PRINTERS_AMS_RFID), db: AsyncSession = Depends(get_db), ): """Re-read RFID for an AMS slot (triggers filament info refresh).""" diff --git a/backend/app/core/permissions.py b/backend/app/core/permissions.py index dd3ad4036..18b2b7735 100644 --- a/backend/app/core/permissions.py +++ b/backend/app/core/permissions.py @@ -21,6 +21,7 @@ class Permission(str, Enum): PRINTERS_DELETE = "printers:delete" PRINTERS_CONTROL = "printers:control" # Start/stop/pause/resume prints PRINTERS_FILES = "printers:files" # Send files to printer + PRINTERS_AMS_RFID = "printers:ams_rfid" # Re-read AMS RFID tags # Archives ARCHIVES_READ = "archives:read" @@ -159,6 +160,7 @@ PERMISSION_CATEGORIES = { Permission.PRINTERS_DELETE, Permission.PRINTERS_CONTROL, Permission.PRINTERS_FILES, + Permission.PRINTERS_AMS_RFID, ], "Archives": [ Permission.ARCHIVES_READ, @@ -305,6 +307,7 @@ DEFAULT_GROUPS = { Permission.PRINTERS_DELETE.value, Permission.PRINTERS_CONTROL.value, Permission.PRINTERS_FILES.value, + Permission.PRINTERS_AMS_RFID.value, # Archives - own items only Permission.ARCHIVES_READ.value, Permission.ARCHIVES_CREATE.value, diff --git a/frontend/src/api/client.ts b/frontend/src/api/client.ts index 7b63618e0..e26ac48c2 100644 --- a/frontend/src/api/client.ts +++ b/frontend/src/api/client.ts @@ -1727,7 +1727,7 @@ export interface ExternalLinkUpdate { // Permission type - all available permissions export type Permission = - | 'printers:read' | 'printers:create' | 'printers:update' | 'printers:delete' | 'printers:control' | 'printers:files' + | 'printers:read' | 'printers:create' | 'printers:update' | 'printers:delete' | 'printers:control' | 'printers:files' | 'printers:ams_rfid' | 'archives:read' | 'archives:create' | 'archives:update_own' | 'archives:update_all' | 'archives:delete_own' | 'archives:delete_all' | 'archives:reprint_own' | 'archives:reprint_all' diff --git a/frontend/src/pages/PrintersPage.tsx b/frontend/src/pages/PrintersPage.tsx index 836b5265d..7ad179fb2 100644 --- a/frontend/src/pages/PrintersPage.tsx +++ b/frontend/src/pages/PrintersPage.tsx @@ -2291,18 +2291,18 @@ function PrinterCard({