1 RBAC
Claude edited this page 2026-06-29 21:37:15 +00:00

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 in check_vm_scope ausgewertet.

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.