mirror of
https://github.com/maziggy/bambuddy.git
synced 2026-09-30 03:01:21 +02:00
- 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
410 lines
13 KiB
Python
410 lines
13 KiB
Python
"""Permission definitions for the group-based access control system.
|
|
|
|
This module defines all permissions using a string enum with `resource:action` naming.
|
|
Permissions are additive across groups - a user has all permissions from all their groups.
|
|
"""
|
|
|
|
from enum import Enum
|
|
|
|
|
|
class Permission(str, Enum):
|
|
"""All available permissions in the system.
|
|
|
|
Permissions follow the pattern: resource:action
|
|
Actions typically include: read, create, update, delete, plus resource-specific actions.
|
|
"""
|
|
|
|
# Printers
|
|
PRINTERS_READ = "printers:read"
|
|
PRINTERS_CREATE = "printers:create"
|
|
PRINTERS_UPDATE = "printers:update"
|
|
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"
|
|
ARCHIVES_CREATE = "archives:create"
|
|
ARCHIVES_UPDATE_OWN = "archives:update_own"
|
|
ARCHIVES_UPDATE_ALL = "archives:update_all"
|
|
ARCHIVES_DELETE_OWN = "archives:delete_own"
|
|
ARCHIVES_DELETE_ALL = "archives:delete_all"
|
|
ARCHIVES_REPRINT_OWN = "archives:reprint_own"
|
|
ARCHIVES_REPRINT_ALL = "archives:reprint_all"
|
|
|
|
# Queue
|
|
QUEUE_READ = "queue:read"
|
|
QUEUE_CREATE = "queue:create"
|
|
QUEUE_UPDATE_OWN = "queue:update_own"
|
|
QUEUE_UPDATE_ALL = "queue:update_all"
|
|
QUEUE_DELETE_OWN = "queue:delete_own"
|
|
QUEUE_DELETE_ALL = "queue:delete_all"
|
|
QUEUE_REORDER = "queue:reorder"
|
|
|
|
# Library
|
|
LIBRARY_READ = "library:read"
|
|
LIBRARY_UPLOAD = "library:upload"
|
|
LIBRARY_UPDATE_OWN = "library:update_own"
|
|
LIBRARY_UPDATE_ALL = "library:update_all"
|
|
LIBRARY_DELETE_OWN = "library:delete_own"
|
|
LIBRARY_DELETE_ALL = "library:delete_all"
|
|
|
|
# Projects
|
|
PROJECTS_READ = "projects:read"
|
|
PROJECTS_CREATE = "projects:create"
|
|
PROJECTS_UPDATE = "projects:update"
|
|
PROJECTS_DELETE = "projects:delete"
|
|
|
|
# Filaments
|
|
FILAMENTS_READ = "filaments:read"
|
|
FILAMENTS_CREATE = "filaments:create"
|
|
FILAMENTS_UPDATE = "filaments:update"
|
|
FILAMENTS_DELETE = "filaments:delete"
|
|
|
|
# Smart Plugs
|
|
SMART_PLUGS_READ = "smart_plugs:read"
|
|
SMART_PLUGS_CREATE = "smart_plugs:create"
|
|
SMART_PLUGS_UPDATE = "smart_plugs:update"
|
|
SMART_PLUGS_DELETE = "smart_plugs:delete"
|
|
SMART_PLUGS_CONTROL = "smart_plugs:control" # Turn on/off
|
|
|
|
# Camera
|
|
CAMERA_VIEW = "camera:view"
|
|
|
|
# Maintenance
|
|
MAINTENANCE_READ = "maintenance:read"
|
|
MAINTENANCE_CREATE = "maintenance:create"
|
|
MAINTENANCE_UPDATE = "maintenance:update"
|
|
MAINTENANCE_DELETE = "maintenance:delete"
|
|
|
|
# K-Profiles
|
|
KPROFILES_READ = "kprofiles:read"
|
|
KPROFILES_CREATE = "kprofiles:create"
|
|
KPROFILES_UPDATE = "kprofiles:update"
|
|
KPROFILES_DELETE = "kprofiles:delete"
|
|
|
|
# Notifications
|
|
NOTIFICATIONS_READ = "notifications:read"
|
|
NOTIFICATIONS_CREATE = "notifications:create"
|
|
NOTIFICATIONS_UPDATE = "notifications:update"
|
|
NOTIFICATIONS_DELETE = "notifications:delete"
|
|
|
|
# Notification Templates
|
|
NOTIFICATION_TEMPLATES_READ = "notification_templates:read"
|
|
NOTIFICATION_TEMPLATES_UPDATE = "notification_templates:update"
|
|
|
|
# External Links
|
|
EXTERNAL_LINKS_READ = "external_links:read"
|
|
EXTERNAL_LINKS_CREATE = "external_links:create"
|
|
EXTERNAL_LINKS_UPDATE = "external_links:update"
|
|
EXTERNAL_LINKS_DELETE = "external_links:delete"
|
|
|
|
# Discovery (network scanning)
|
|
DISCOVERY_SCAN = "discovery:scan"
|
|
|
|
# Firmware
|
|
FIRMWARE_READ = "firmware:read"
|
|
FIRMWARE_UPDATE = "firmware:update"
|
|
|
|
# AMS History
|
|
AMS_HISTORY_READ = "ams_history:read"
|
|
|
|
# Stats/Metrics
|
|
STATS_READ = "stats:read"
|
|
|
|
# System Info
|
|
SYSTEM_READ = "system:read"
|
|
|
|
# Settings (admin-level)
|
|
SETTINGS_READ = "settings:read"
|
|
SETTINGS_UPDATE = "settings:update"
|
|
SETTINGS_BACKUP = "settings:backup"
|
|
SETTINGS_RESTORE = "settings:restore"
|
|
|
|
# GitHub Backup (admin-level)
|
|
GITHUB_BACKUP = "github:backup"
|
|
GITHUB_RESTORE = "github:restore"
|
|
|
|
# Cloud Auth (admin-level)
|
|
CLOUD_AUTH = "cloud:auth"
|
|
|
|
# API Keys (admin-level)
|
|
API_KEYS_READ = "api_keys:read"
|
|
API_KEYS_CREATE = "api_keys:create"
|
|
API_KEYS_UPDATE = "api_keys:update"
|
|
API_KEYS_DELETE = "api_keys:delete"
|
|
|
|
# Users (admin-level)
|
|
USERS_READ = "users:read"
|
|
USERS_CREATE = "users:create"
|
|
USERS_UPDATE = "users:update"
|
|
USERS_DELETE = "users:delete"
|
|
|
|
# Groups (admin-level)
|
|
GROUPS_READ = "groups:read"
|
|
GROUPS_CREATE = "groups:create"
|
|
GROUPS_UPDATE = "groups:update"
|
|
GROUPS_DELETE = "groups:delete"
|
|
|
|
# WebSocket connection
|
|
WEBSOCKET_CONNECT = "websocket:connect"
|
|
|
|
|
|
# Permission categories for UI organization
|
|
PERMISSION_CATEGORIES = {
|
|
"Printers": [
|
|
Permission.PRINTERS_READ,
|
|
Permission.PRINTERS_CREATE,
|
|
Permission.PRINTERS_UPDATE,
|
|
Permission.PRINTERS_DELETE,
|
|
Permission.PRINTERS_CONTROL,
|
|
Permission.PRINTERS_FILES,
|
|
Permission.PRINTERS_AMS_RFID,
|
|
],
|
|
"Archives": [
|
|
Permission.ARCHIVES_READ,
|
|
Permission.ARCHIVES_CREATE,
|
|
Permission.ARCHIVES_UPDATE_OWN,
|
|
Permission.ARCHIVES_UPDATE_ALL,
|
|
Permission.ARCHIVES_DELETE_OWN,
|
|
Permission.ARCHIVES_DELETE_ALL,
|
|
Permission.ARCHIVES_REPRINT_OWN,
|
|
Permission.ARCHIVES_REPRINT_ALL,
|
|
],
|
|
"Queue": [
|
|
Permission.QUEUE_READ,
|
|
Permission.QUEUE_CREATE,
|
|
Permission.QUEUE_UPDATE_OWN,
|
|
Permission.QUEUE_UPDATE_ALL,
|
|
Permission.QUEUE_DELETE_OWN,
|
|
Permission.QUEUE_DELETE_ALL,
|
|
Permission.QUEUE_REORDER,
|
|
],
|
|
"Library": [
|
|
Permission.LIBRARY_READ,
|
|
Permission.LIBRARY_UPLOAD,
|
|
Permission.LIBRARY_UPDATE_OWN,
|
|
Permission.LIBRARY_UPDATE_ALL,
|
|
Permission.LIBRARY_DELETE_OWN,
|
|
Permission.LIBRARY_DELETE_ALL,
|
|
],
|
|
"Projects": [
|
|
Permission.PROJECTS_READ,
|
|
Permission.PROJECTS_CREATE,
|
|
Permission.PROJECTS_UPDATE,
|
|
Permission.PROJECTS_DELETE,
|
|
],
|
|
"Filaments": [
|
|
Permission.FILAMENTS_READ,
|
|
Permission.FILAMENTS_CREATE,
|
|
Permission.FILAMENTS_UPDATE,
|
|
Permission.FILAMENTS_DELETE,
|
|
],
|
|
"Smart Plugs": [
|
|
Permission.SMART_PLUGS_READ,
|
|
Permission.SMART_PLUGS_CREATE,
|
|
Permission.SMART_PLUGS_UPDATE,
|
|
Permission.SMART_PLUGS_DELETE,
|
|
Permission.SMART_PLUGS_CONTROL,
|
|
],
|
|
"Camera": [
|
|
Permission.CAMERA_VIEW,
|
|
],
|
|
"Maintenance": [
|
|
Permission.MAINTENANCE_READ,
|
|
Permission.MAINTENANCE_CREATE,
|
|
Permission.MAINTENANCE_UPDATE,
|
|
Permission.MAINTENANCE_DELETE,
|
|
],
|
|
"K-Profiles": [
|
|
Permission.KPROFILES_READ,
|
|
Permission.KPROFILES_CREATE,
|
|
Permission.KPROFILES_UPDATE,
|
|
Permission.KPROFILES_DELETE,
|
|
],
|
|
"Notifications": [
|
|
Permission.NOTIFICATIONS_READ,
|
|
Permission.NOTIFICATIONS_CREATE,
|
|
Permission.NOTIFICATIONS_UPDATE,
|
|
Permission.NOTIFICATIONS_DELETE,
|
|
Permission.NOTIFICATION_TEMPLATES_READ,
|
|
Permission.NOTIFICATION_TEMPLATES_UPDATE,
|
|
],
|
|
"External Links": [
|
|
Permission.EXTERNAL_LINKS_READ,
|
|
Permission.EXTERNAL_LINKS_CREATE,
|
|
Permission.EXTERNAL_LINKS_UPDATE,
|
|
Permission.EXTERNAL_LINKS_DELETE,
|
|
],
|
|
"Discovery": [
|
|
Permission.DISCOVERY_SCAN,
|
|
],
|
|
"Firmware": [
|
|
Permission.FIRMWARE_READ,
|
|
Permission.FIRMWARE_UPDATE,
|
|
],
|
|
"Stats & History": [
|
|
Permission.AMS_HISTORY_READ,
|
|
Permission.STATS_READ,
|
|
],
|
|
"System": [
|
|
Permission.SYSTEM_READ,
|
|
],
|
|
"Settings": [
|
|
Permission.SETTINGS_READ,
|
|
Permission.SETTINGS_UPDATE,
|
|
Permission.SETTINGS_BACKUP,
|
|
Permission.SETTINGS_RESTORE,
|
|
],
|
|
"Backup": [
|
|
Permission.GITHUB_BACKUP,
|
|
Permission.GITHUB_RESTORE,
|
|
],
|
|
"Cloud": [
|
|
Permission.CLOUD_AUTH,
|
|
],
|
|
"API Keys": [
|
|
Permission.API_KEYS_READ,
|
|
Permission.API_KEYS_CREATE,
|
|
Permission.API_KEYS_UPDATE,
|
|
Permission.API_KEYS_DELETE,
|
|
],
|
|
"User Management": [
|
|
Permission.USERS_READ,
|
|
Permission.USERS_CREATE,
|
|
Permission.USERS_UPDATE,
|
|
Permission.USERS_DELETE,
|
|
Permission.GROUPS_READ,
|
|
Permission.GROUPS_CREATE,
|
|
Permission.GROUPS_UPDATE,
|
|
Permission.GROUPS_DELETE,
|
|
],
|
|
"WebSocket": [
|
|
Permission.WEBSOCKET_CONNECT,
|
|
],
|
|
}
|
|
|
|
|
|
# All permissions as a list
|
|
ALL_PERMISSIONS = [p.value for p in Permission]
|
|
|
|
|
|
# Default group definitions
|
|
DEFAULT_GROUPS = {
|
|
"Administrators": {
|
|
"description": "Full access to all features and settings",
|
|
"permissions": ALL_PERMISSIONS, # All permissions
|
|
"is_system": True,
|
|
},
|
|
"Operators": {
|
|
"description": "Can control printers, manage queue and archives, view settings",
|
|
"permissions": [
|
|
# Printers - full control
|
|
Permission.PRINTERS_READ.value,
|
|
Permission.PRINTERS_CREATE.value,
|
|
Permission.PRINTERS_UPDATE.value,
|
|
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,
|
|
Permission.ARCHIVES_UPDATE_OWN.value,
|
|
Permission.ARCHIVES_DELETE_OWN.value,
|
|
Permission.ARCHIVES_REPRINT_OWN.value,
|
|
# Queue - own items only
|
|
Permission.QUEUE_READ.value,
|
|
Permission.QUEUE_CREATE.value,
|
|
Permission.QUEUE_UPDATE_OWN.value,
|
|
Permission.QUEUE_DELETE_OWN.value,
|
|
Permission.QUEUE_REORDER.value,
|
|
# Library - own items only
|
|
Permission.LIBRARY_READ.value,
|
|
Permission.LIBRARY_UPLOAD.value,
|
|
Permission.LIBRARY_UPDATE_OWN.value,
|
|
Permission.LIBRARY_DELETE_OWN.value,
|
|
# Projects - full access
|
|
Permission.PROJECTS_READ.value,
|
|
Permission.PROJECTS_CREATE.value,
|
|
Permission.PROJECTS_UPDATE.value,
|
|
Permission.PROJECTS_DELETE.value,
|
|
# Filaments - full access
|
|
Permission.FILAMENTS_READ.value,
|
|
Permission.FILAMENTS_CREATE.value,
|
|
Permission.FILAMENTS_UPDATE.value,
|
|
Permission.FILAMENTS_DELETE.value,
|
|
# Smart Plugs - full access
|
|
Permission.SMART_PLUGS_READ.value,
|
|
Permission.SMART_PLUGS_CREATE.value,
|
|
Permission.SMART_PLUGS_UPDATE.value,
|
|
Permission.SMART_PLUGS_DELETE.value,
|
|
Permission.SMART_PLUGS_CONTROL.value,
|
|
# Camera - view
|
|
Permission.CAMERA_VIEW.value,
|
|
# Maintenance - full access
|
|
Permission.MAINTENANCE_READ.value,
|
|
Permission.MAINTENANCE_CREATE.value,
|
|
Permission.MAINTENANCE_UPDATE.value,
|
|
Permission.MAINTENANCE_DELETE.value,
|
|
# K-Profiles - full access
|
|
Permission.KPROFILES_READ.value,
|
|
Permission.KPROFILES_CREATE.value,
|
|
Permission.KPROFILES_UPDATE.value,
|
|
Permission.KPROFILES_DELETE.value,
|
|
# Notifications - full access
|
|
Permission.NOTIFICATIONS_READ.value,
|
|
Permission.NOTIFICATIONS_CREATE.value,
|
|
Permission.NOTIFICATIONS_UPDATE.value,
|
|
Permission.NOTIFICATIONS_DELETE.value,
|
|
Permission.NOTIFICATION_TEMPLATES_READ.value,
|
|
Permission.NOTIFICATION_TEMPLATES_UPDATE.value,
|
|
# External Links - full access
|
|
Permission.EXTERNAL_LINKS_READ.value,
|
|
Permission.EXTERNAL_LINKS_CREATE.value,
|
|
Permission.EXTERNAL_LINKS_UPDATE.value,
|
|
Permission.EXTERNAL_LINKS_DELETE.value,
|
|
# Discovery
|
|
Permission.DISCOVERY_SCAN.value,
|
|
# Firmware - read only
|
|
Permission.FIRMWARE_READ.value,
|
|
# Stats & History
|
|
Permission.AMS_HISTORY_READ.value,
|
|
Permission.STATS_READ.value,
|
|
Permission.SYSTEM_READ.value,
|
|
# Settings - read only
|
|
Permission.SETTINGS_READ.value,
|
|
# WebSocket
|
|
Permission.WEBSOCKET_CONNECT.value,
|
|
],
|
|
"is_system": True,
|
|
},
|
|
"Viewers": {
|
|
"description": "Read-only access to printers, archives, and queue",
|
|
"permissions": [
|
|
# Read-only access
|
|
Permission.PRINTERS_READ.value,
|
|
Permission.ARCHIVES_READ.value,
|
|
Permission.QUEUE_READ.value,
|
|
Permission.LIBRARY_READ.value,
|
|
Permission.PROJECTS_READ.value,
|
|
Permission.FILAMENTS_READ.value,
|
|
Permission.SMART_PLUGS_READ.value,
|
|
Permission.CAMERA_VIEW.value,
|
|
Permission.MAINTENANCE_READ.value,
|
|
Permission.KPROFILES_READ.value,
|
|
Permission.NOTIFICATIONS_READ.value,
|
|
Permission.NOTIFICATION_TEMPLATES_READ.value,
|
|
Permission.EXTERNAL_LINKS_READ.value,
|
|
Permission.FIRMWARE_READ.value,
|
|
Permission.AMS_HISTORY_READ.value,
|
|
Permission.STATS_READ.value,
|
|
Permission.SYSTEM_READ.value,
|
|
Permission.SETTINGS_READ.value,
|
|
Permission.WEBSOCKET_CONNECT.value,
|
|
],
|
|
"is_system": True,
|
|
},
|
|
}
|