No results
1
RBAC
Claude edited this page 2026-06-29 21:37:15 +00:00
Table of Contents
RBAC
Berechtigung läuft pro Mandant (Tenant), nicht über globale Rollen.
Mandanten (tenants)
id, name (unique), customer_number (unique, ^[0-9]{3,6}$),
description. Editierbar via Settings → Mandanten.
Zuweisung
- Node ↔ Tenant: 1 Node → max. 1 Mandant (
tenant_nodes,uq_tenant_nodes_node_id). Nicht zugewiesene Nodes nur für Superadmin sichtbar. - VMID-Ranges (
tenant_vm_ranges): Alternative zur Whole-Node-Zuweisung; aktuell kein UI, nur incheck_vm_scopeausgewertet.
User-Rechte
| Recht | Bedeutung |
|---|---|
is_superadmin (User-Flag) |
überspringt alle Checks |
user_tenant_roles.can_write |
schreibend pro Tenant (impliziert can_read) |
user_tenant_roles.can_read |
lesend pro Tenant |
user_node_access |
optionale Per-User-Node-Whitelist |
Node-Whitelist: leer = User sieht alle Nodes seiner Mandanten. Gesetzt = Node muss in Mandanten-Scope und Whitelist sein.
Helpers (server/auth/rbac.py)
| Helper | Zweck |
|---|---|
require_superadmin |
strikte Superadmin-Pflicht (Tenant/User-Verwaltung, Provisioning) |
require_read() / require_write() |
Dep-Factories |
require_role(min) |
Compat-Shim: viewer→read, operator/admin→write |
check_node_scope(name, cu, db) |
Tenant-Scope + Node-Whitelist |
check_vm_scope(name, vmid, cu, db) |
+ VMID-Range |
Tenant-Header
Frontend setzt X-Tenant-ID automatisch aus currentTenant-Store.
api.ts request() zieht den Header aus dem Store, wenn nicht explizit gesetzt.
Sidebar hat Mandanten-Switcher; Superadmin „Alle (Superadmin)" → kein Header →
sieht alles.