permissions.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392
  1. """Permission definitions for the group-based access control system.
  2. This module defines all permissions using a string enum with `resource:action` naming.
  3. Permissions are additive across groups - a user has all permissions from all their groups.
  4. """
  5. from enum import Enum
  6. class Permission(str, Enum):
  7. """All available permissions in the system.
  8. Permissions follow the pattern: resource:action
  9. Actions typically include: read, create, update, delete, plus resource-specific actions.
  10. """
  11. # Printers
  12. PRINTERS_READ = "printers:read"
  13. PRINTERS_CREATE = "printers:create"
  14. PRINTERS_UPDATE = "printers:update"
  15. PRINTERS_DELETE = "printers:delete"
  16. PRINTERS_CONTROL = "printers:control" # Start/stop/pause/resume prints
  17. PRINTERS_FILES = "printers:files" # Send files to printer
  18. # Archives
  19. ARCHIVES_READ = "archives:read"
  20. ARCHIVES_CREATE = "archives:create"
  21. ARCHIVES_UPDATE = "archives:update"
  22. ARCHIVES_DELETE = "archives:delete"
  23. ARCHIVES_REPRINT = "archives:reprint" # Reprint from archive
  24. # Queue
  25. QUEUE_READ = "queue:read"
  26. QUEUE_CREATE = "queue:create"
  27. QUEUE_UPDATE = "queue:update"
  28. QUEUE_DELETE = "queue:delete"
  29. QUEUE_REORDER = "queue:reorder"
  30. # Library
  31. LIBRARY_READ = "library:read"
  32. LIBRARY_UPLOAD = "library:upload"
  33. LIBRARY_UPDATE = "library:update"
  34. LIBRARY_DELETE = "library:delete"
  35. # Projects
  36. PROJECTS_READ = "projects:read"
  37. PROJECTS_CREATE = "projects:create"
  38. PROJECTS_UPDATE = "projects:update"
  39. PROJECTS_DELETE = "projects:delete"
  40. # Filaments
  41. FILAMENTS_READ = "filaments:read"
  42. FILAMENTS_CREATE = "filaments:create"
  43. FILAMENTS_UPDATE = "filaments:update"
  44. FILAMENTS_DELETE = "filaments:delete"
  45. # Smart Plugs
  46. SMART_PLUGS_READ = "smart_plugs:read"
  47. SMART_PLUGS_CREATE = "smart_plugs:create"
  48. SMART_PLUGS_UPDATE = "smart_plugs:update"
  49. SMART_PLUGS_DELETE = "smart_plugs:delete"
  50. SMART_PLUGS_CONTROL = "smart_plugs:control" # Turn on/off
  51. # Camera
  52. CAMERA_VIEW = "camera:view"
  53. # Maintenance
  54. MAINTENANCE_READ = "maintenance:read"
  55. MAINTENANCE_CREATE = "maintenance:create"
  56. MAINTENANCE_UPDATE = "maintenance:update"
  57. MAINTENANCE_DELETE = "maintenance:delete"
  58. # K-Profiles
  59. KPROFILES_READ = "kprofiles:read"
  60. KPROFILES_CREATE = "kprofiles:create"
  61. KPROFILES_UPDATE = "kprofiles:update"
  62. KPROFILES_DELETE = "kprofiles:delete"
  63. # Notifications
  64. NOTIFICATIONS_READ = "notifications:read"
  65. NOTIFICATIONS_CREATE = "notifications:create"
  66. NOTIFICATIONS_UPDATE = "notifications:update"
  67. NOTIFICATIONS_DELETE = "notifications:delete"
  68. # Notification Templates
  69. NOTIFICATION_TEMPLATES_READ = "notification_templates:read"
  70. NOTIFICATION_TEMPLATES_UPDATE = "notification_templates:update"
  71. # External Links
  72. EXTERNAL_LINKS_READ = "external_links:read"
  73. EXTERNAL_LINKS_CREATE = "external_links:create"
  74. EXTERNAL_LINKS_UPDATE = "external_links:update"
  75. EXTERNAL_LINKS_DELETE = "external_links:delete"
  76. # Discovery (network scanning)
  77. DISCOVERY_SCAN = "discovery:scan"
  78. # Firmware
  79. FIRMWARE_READ = "firmware:read"
  80. FIRMWARE_UPDATE = "firmware:update"
  81. # AMS History
  82. AMS_HISTORY_READ = "ams_history:read"
  83. # Stats/Metrics
  84. STATS_READ = "stats:read"
  85. # System Info
  86. SYSTEM_READ = "system:read"
  87. # Settings (admin-level)
  88. SETTINGS_READ = "settings:read"
  89. SETTINGS_UPDATE = "settings:update"
  90. SETTINGS_BACKUP = "settings:backup"
  91. SETTINGS_RESTORE = "settings:restore"
  92. # GitHub Backup (admin-level)
  93. GITHUB_BACKUP = "github:backup"
  94. GITHUB_RESTORE = "github:restore"
  95. # Cloud Auth (admin-level)
  96. CLOUD_AUTH = "cloud:auth"
  97. # API Keys (admin-level)
  98. API_KEYS_READ = "api_keys:read"
  99. API_KEYS_CREATE = "api_keys:create"
  100. API_KEYS_UPDATE = "api_keys:update"
  101. API_KEYS_DELETE = "api_keys:delete"
  102. # Users (admin-level)
  103. USERS_READ = "users:read"
  104. USERS_CREATE = "users:create"
  105. USERS_UPDATE = "users:update"
  106. USERS_DELETE = "users:delete"
  107. # Groups (admin-level)
  108. GROUPS_READ = "groups:read"
  109. GROUPS_CREATE = "groups:create"
  110. GROUPS_UPDATE = "groups:update"
  111. GROUPS_DELETE = "groups:delete"
  112. # WebSocket connection
  113. WEBSOCKET_CONNECT = "websocket:connect"
  114. # Permission categories for UI organization
  115. PERMISSION_CATEGORIES = {
  116. "Printers": [
  117. Permission.PRINTERS_READ,
  118. Permission.PRINTERS_CREATE,
  119. Permission.PRINTERS_UPDATE,
  120. Permission.PRINTERS_DELETE,
  121. Permission.PRINTERS_CONTROL,
  122. Permission.PRINTERS_FILES,
  123. ],
  124. "Archives": [
  125. Permission.ARCHIVES_READ,
  126. Permission.ARCHIVES_CREATE,
  127. Permission.ARCHIVES_UPDATE,
  128. Permission.ARCHIVES_DELETE,
  129. Permission.ARCHIVES_REPRINT,
  130. ],
  131. "Queue": [
  132. Permission.QUEUE_READ,
  133. Permission.QUEUE_CREATE,
  134. Permission.QUEUE_UPDATE,
  135. Permission.QUEUE_DELETE,
  136. Permission.QUEUE_REORDER,
  137. ],
  138. "Library": [
  139. Permission.LIBRARY_READ,
  140. Permission.LIBRARY_UPLOAD,
  141. Permission.LIBRARY_UPDATE,
  142. Permission.LIBRARY_DELETE,
  143. ],
  144. "Projects": [
  145. Permission.PROJECTS_READ,
  146. Permission.PROJECTS_CREATE,
  147. Permission.PROJECTS_UPDATE,
  148. Permission.PROJECTS_DELETE,
  149. ],
  150. "Filaments": [
  151. Permission.FILAMENTS_READ,
  152. Permission.FILAMENTS_CREATE,
  153. Permission.FILAMENTS_UPDATE,
  154. Permission.FILAMENTS_DELETE,
  155. ],
  156. "Smart Plugs": [
  157. Permission.SMART_PLUGS_READ,
  158. Permission.SMART_PLUGS_CREATE,
  159. Permission.SMART_PLUGS_UPDATE,
  160. Permission.SMART_PLUGS_DELETE,
  161. Permission.SMART_PLUGS_CONTROL,
  162. ],
  163. "Camera": [
  164. Permission.CAMERA_VIEW,
  165. ],
  166. "Maintenance": [
  167. Permission.MAINTENANCE_READ,
  168. Permission.MAINTENANCE_CREATE,
  169. Permission.MAINTENANCE_UPDATE,
  170. Permission.MAINTENANCE_DELETE,
  171. ],
  172. "K-Profiles": [
  173. Permission.KPROFILES_READ,
  174. Permission.KPROFILES_CREATE,
  175. Permission.KPROFILES_UPDATE,
  176. Permission.KPROFILES_DELETE,
  177. ],
  178. "Notifications": [
  179. Permission.NOTIFICATIONS_READ,
  180. Permission.NOTIFICATIONS_CREATE,
  181. Permission.NOTIFICATIONS_UPDATE,
  182. Permission.NOTIFICATIONS_DELETE,
  183. Permission.NOTIFICATION_TEMPLATES_READ,
  184. Permission.NOTIFICATION_TEMPLATES_UPDATE,
  185. ],
  186. "External Links": [
  187. Permission.EXTERNAL_LINKS_READ,
  188. Permission.EXTERNAL_LINKS_CREATE,
  189. Permission.EXTERNAL_LINKS_UPDATE,
  190. Permission.EXTERNAL_LINKS_DELETE,
  191. ],
  192. "Discovery": [
  193. Permission.DISCOVERY_SCAN,
  194. ],
  195. "Firmware": [
  196. Permission.FIRMWARE_READ,
  197. Permission.FIRMWARE_UPDATE,
  198. ],
  199. "Stats & History": [
  200. Permission.AMS_HISTORY_READ,
  201. Permission.STATS_READ,
  202. ],
  203. "System": [
  204. Permission.SYSTEM_READ,
  205. ],
  206. "Settings": [
  207. Permission.SETTINGS_READ,
  208. Permission.SETTINGS_UPDATE,
  209. Permission.SETTINGS_BACKUP,
  210. Permission.SETTINGS_RESTORE,
  211. ],
  212. "Backup": [
  213. Permission.GITHUB_BACKUP,
  214. Permission.GITHUB_RESTORE,
  215. ],
  216. "Cloud": [
  217. Permission.CLOUD_AUTH,
  218. ],
  219. "API Keys": [
  220. Permission.API_KEYS_READ,
  221. Permission.API_KEYS_CREATE,
  222. Permission.API_KEYS_UPDATE,
  223. Permission.API_KEYS_DELETE,
  224. ],
  225. "User Management": [
  226. Permission.USERS_READ,
  227. Permission.USERS_CREATE,
  228. Permission.USERS_UPDATE,
  229. Permission.USERS_DELETE,
  230. Permission.GROUPS_READ,
  231. Permission.GROUPS_CREATE,
  232. Permission.GROUPS_UPDATE,
  233. Permission.GROUPS_DELETE,
  234. ],
  235. "WebSocket": [
  236. Permission.WEBSOCKET_CONNECT,
  237. ],
  238. }
  239. # All permissions as a list
  240. ALL_PERMISSIONS = [p.value for p in Permission]
  241. # Default group definitions
  242. DEFAULT_GROUPS = {
  243. "Administrators": {
  244. "description": "Full access to all features and settings",
  245. "permissions": ALL_PERMISSIONS, # All permissions
  246. "is_system": True,
  247. },
  248. "Operators": {
  249. "description": "Can control printers, manage queue and archives, view settings",
  250. "permissions": [
  251. # Printers - full control
  252. Permission.PRINTERS_READ.value,
  253. Permission.PRINTERS_CREATE.value,
  254. Permission.PRINTERS_UPDATE.value,
  255. Permission.PRINTERS_DELETE.value,
  256. Permission.PRINTERS_CONTROL.value,
  257. Permission.PRINTERS_FILES.value,
  258. # Archives - full access
  259. Permission.ARCHIVES_READ.value,
  260. Permission.ARCHIVES_CREATE.value,
  261. Permission.ARCHIVES_UPDATE.value,
  262. Permission.ARCHIVES_DELETE.value,
  263. Permission.ARCHIVES_REPRINT.value,
  264. # Queue - full access
  265. Permission.QUEUE_READ.value,
  266. Permission.QUEUE_CREATE.value,
  267. Permission.QUEUE_UPDATE.value,
  268. Permission.QUEUE_DELETE.value,
  269. Permission.QUEUE_REORDER.value,
  270. # Library - full access
  271. Permission.LIBRARY_READ.value,
  272. Permission.LIBRARY_UPLOAD.value,
  273. Permission.LIBRARY_UPDATE.value,
  274. Permission.LIBRARY_DELETE.value,
  275. # Projects - full access
  276. Permission.PROJECTS_READ.value,
  277. Permission.PROJECTS_CREATE.value,
  278. Permission.PROJECTS_UPDATE.value,
  279. Permission.PROJECTS_DELETE.value,
  280. # Filaments - full access
  281. Permission.FILAMENTS_READ.value,
  282. Permission.FILAMENTS_CREATE.value,
  283. Permission.FILAMENTS_UPDATE.value,
  284. Permission.FILAMENTS_DELETE.value,
  285. # Smart Plugs - full access
  286. Permission.SMART_PLUGS_READ.value,
  287. Permission.SMART_PLUGS_CREATE.value,
  288. Permission.SMART_PLUGS_UPDATE.value,
  289. Permission.SMART_PLUGS_DELETE.value,
  290. Permission.SMART_PLUGS_CONTROL.value,
  291. # Camera - view
  292. Permission.CAMERA_VIEW.value,
  293. # Maintenance - full access
  294. Permission.MAINTENANCE_READ.value,
  295. Permission.MAINTENANCE_CREATE.value,
  296. Permission.MAINTENANCE_UPDATE.value,
  297. Permission.MAINTENANCE_DELETE.value,
  298. # K-Profiles - full access
  299. Permission.KPROFILES_READ.value,
  300. Permission.KPROFILES_CREATE.value,
  301. Permission.KPROFILES_UPDATE.value,
  302. Permission.KPROFILES_DELETE.value,
  303. # Notifications - full access
  304. Permission.NOTIFICATIONS_READ.value,
  305. Permission.NOTIFICATIONS_CREATE.value,
  306. Permission.NOTIFICATIONS_UPDATE.value,
  307. Permission.NOTIFICATIONS_DELETE.value,
  308. Permission.NOTIFICATION_TEMPLATES_READ.value,
  309. Permission.NOTIFICATION_TEMPLATES_UPDATE.value,
  310. # External Links - full access
  311. Permission.EXTERNAL_LINKS_READ.value,
  312. Permission.EXTERNAL_LINKS_CREATE.value,
  313. Permission.EXTERNAL_LINKS_UPDATE.value,
  314. Permission.EXTERNAL_LINKS_DELETE.value,
  315. # Discovery
  316. Permission.DISCOVERY_SCAN.value,
  317. # Firmware - read only
  318. Permission.FIRMWARE_READ.value,
  319. # Stats & History
  320. Permission.AMS_HISTORY_READ.value,
  321. Permission.STATS_READ.value,
  322. Permission.SYSTEM_READ.value,
  323. # Settings - read only
  324. Permission.SETTINGS_READ.value,
  325. # WebSocket
  326. Permission.WEBSOCKET_CONNECT.value,
  327. ],
  328. "is_system": True,
  329. },
  330. "Viewers": {
  331. "description": "Read-only access to printers, archives, and queue",
  332. "permissions": [
  333. # Read-only access
  334. Permission.PRINTERS_READ.value,
  335. Permission.ARCHIVES_READ.value,
  336. Permission.QUEUE_READ.value,
  337. Permission.LIBRARY_READ.value,
  338. Permission.PROJECTS_READ.value,
  339. Permission.FILAMENTS_READ.value,
  340. Permission.SMART_PLUGS_READ.value,
  341. Permission.CAMERA_VIEW.value,
  342. Permission.MAINTENANCE_READ.value,
  343. Permission.KPROFILES_READ.value,
  344. Permission.NOTIFICATIONS_READ.value,
  345. Permission.NOTIFICATION_TEMPLATES_READ.value,
  346. Permission.EXTERNAL_LINKS_READ.value,
  347. Permission.FIRMWARE_READ.value,
  348. Permission.AMS_HISTORY_READ.value,
  349. Permission.STATS_READ.value,
  350. Permission.SYSTEM_READ.value,
  351. Permission.SETTINGS_READ.value,
  352. Permission.WEBSOCKET_CONNECT.value,
  353. ],
  354. "is_system": True,
  355. },
  356. }