fix(tokens): Supervisor-Rechte im Formular, Vollzugriff nicht mehr vorangekreuzt

Aufgefallen bei der Frage, wo man ein Werkbank-Token anlegt. Drei Befunde an
derselben Stelle:

1. DIE SUPERVISOR-RECHTE FEHLTEN IM FORMULAR

   TokenManager::KNOWN_SCOPES kennt supervisor:read, :manage und :report seit
   2.6.0 - die Ankreuzliste bot sie nie an. Ein Werkbank-Token liess sich
   ueber die Oberflaeche also gar nicht so ausstellen, wie die Anleitung es
   verlangt: dc_findings, dc_finding_summary und dc_metrics im MCP-Adapter
   waeren mit "unauthorized" gescheitert, und der Grund waere nirgends zu
   sehen gewesen.

2. "ALLE RECHTE" WAR DIE VORGABE

   Wer ein Agenten-Token anlegte und den Haken uebersah, gab damit alles
   heraus - Releases veroeffentlichen und Tokens ausstellen inbegriffen. Die
   gefaehrlichste Auswahl gehoert nicht in die Vorgabe. Vorangekreuzt ist
   jetzt "Bugtracker verwalten", also der dokumentierte Normalfall; der
   Vollzugriff traegt eine Warnung und muss ausdruecklich gewaehlt werden.

3. DIE ANSICHT HIESS "MASTER-TOKEN ERSTELLEN"

   Deshalb fand niemand das Werkbank-Token: Es entsteht an genau dieser
   Stelle, nur mit anderem Identitaetstyp. Der Name der Ansicht versprach
   etwas anderes, als sie kann - und widersprach der eigenen Regel "kein
   Master-Token an einen Agenten". Heisst jetzt "Token erstellen", mit einem
   Hinweiskasten fuer den Agentenfall.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Deploymentcenter Bot
2026-08-30 13:54:55 +02:00
co-authored by Claude Opus 5
parent 93aabfece3
commit eeda6c911e
2 changed files with 44 additions and 5 deletions
+5 -1
View File
@@ -33,7 +33,11 @@ gelesen zu haben.
## 1. Werkbank-Token anlegen
Im WebUI unter **Token-Verwaltung**:
Im WebUI: **Token-Verwaltung → ➕ Token erstellen**.
Die Ansicht hieß bis 2.7.0 „Master-Token erstellen" — deshalb war das
Werkbank-Token dort nicht zu finden. Es entsteht an derselben Stelle, nur mit
anderem Identitätstyp.
| Feld | Wert |
|---|---|
+39 -4
View File
@@ -5401,7 +5401,25 @@ Antwort:
<div id="sub-tokens-create" class="subtab-content">
<div class="card">
<div class="card-header"><h2 class="card-title">➕ Neuen Master-Token Erstellen</h2></div>
<div class="card-header"><h2 class="card-title">➕ Neuen Token erstellen</h2></div>
<!--
Frueher hiess das hier "Master-Token erstellen" - und genau
deshalb fand niemand das Werkbank-Token: Es entsteht an
derselben Stelle, nur mit anderem Identitaetstyp. Der Name
der Ansicht versprach etwas anderes als sie kann.
-->
<div style="background:rgba(91,157,255,0.08); border-left:3px solid var(--primary); border-radius:8px; padding:0.85rem 1.1rem; margin-bottom:1.25rem; font-size:0.86rem;">
<strong>Werkbank-Token für einen Coding-Agenten?</strong> Hier richtig.
Identitätstyp auf <em>Entwickler KI-Agent</em>, ein Projekt auswählen
(nicht „Keins“) und als Rechte <code>Bugtracker verwalten</code> plus
<code>Befunde lesen</code> ankreuzen — <code>Alle Rechte</code> nicht.
<div style="color:var(--text-muted); margin-top:0.5rem;">
Die Projektbindung ist keine Formsache: Aus ihr leitet der Server
ab, wer eine Meldung abgesetzt hat. Ein Token für alle Projekte,
und das Signal „drei Projekte melden dasselbe“ ist wertlos.
Ausführlich in <code>docs/AGENTEN_ANBINDEN.md</code>.
</div>
</div>
<form method="POST" action="index.php#tab-tokens">
<?= $csrfField ?>
<input type="hidden" name="action" value="create_master_token">
@@ -5453,19 +5471,36 @@ Antwort:
<div style="display:grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap:0.5rem;">
<?php
$scopeChoices = [
'*' => ['🌟 Alle Rechte', 'Uneingeschränkter Zugriff'],
'*' => ['⚠️ Alle Rechte', 'Uneingeschränkt — auch Releases veröffentlichen und Tokens ausstellen. Nicht an einen Agenten geben.'],
'bugtracker:manage' => ['⚙️ Bugtracker verwalten', 'Übernehmen, kommentieren, schließen — schließt Lesen und Melden ein'],
'bugtracker:report' => ['🐛 Bugtracker melden', 'Nur Einträge anlegen — schließt Lesen ein'],
'bugtracker:read' => ['👁️ Bugtracker lesen', 'Nur Abfragen'],
'watchdog:ping' => ['🛡️ Watchdog Heartbeat', 'Statusmeldungen senden'],
'watchdog:read' => ['📊 Watchdog lesen', 'Monitore und Ereignisse abfragen'],
// Die Supervisor-Rechte fehlten hier, obwohl TokenManager
// sie seit 2.6.0 kennt. Folge: Ein Werkbank-Token liess
// sich ueber die Oberflaeche gar nicht vollstaendig
// ausstellen - dc_findings und dc_metrics im MCP-Adapter
// liefen ins unauthorized, und der Grund war nirgends zu
// sehen.
'supervisor:read' => ['🔎 Befunde lesen', 'Supervisor-Befunde abfragen — braucht ein Werkbank-Token für dc_findings'],
'supervisor:manage' => ['🔬 Befunde einstufen', 'Befunde abhaken und bewerten — schließt Lesen ein'],
'supervisor:report' => ['📡 Befunde melden', 'Nur einliefern, etwa aus einem Prüfwerkzeug — schließt Lesen ein'],
'updateservice:read' => ['📦 Updates prüfen', 'Auf neue Releases prüfen'],
'updateservice:publish' => ['🚀 Releases veröffentlichen', 'Neue Releases einstellen — schließt Prüfen ein'],
'license:dev' => ['🧪 DEV-Lizenz abholen', 'Befristeten Testschlüssel selbst ausstellen — nur für Werkbank-Token auf Testmaschinen'],
];
foreach ($scopeChoices as $value => $labels): ?>
<label style="display:flex; align-items:flex-start; gap:0.5rem; font-size:0.85rem; cursor:pointer; background:rgba(255,255,255,0.03); border:1px solid var(--border-glass); border-radius:10px; padding:0.6rem 0.75rem;">
<input type="checkbox" name="scopes[]" value="<?= e($value) ?>" <?= $value === '*' ? 'checked' : '' ?> style="margin-top:3px;">
<?php
// Vorangekreuzt ist "Bugtracker verwalten", nicht "Alle
// Rechte". Zuvor war der Vollzugriff die Vorgabe - wer
// ein Agenten-Token anlegte und den Haken uebersah, gab
// damit alles heraus, inklusive Releases und
// Tokenausstellung. Die gefaehrlichste Auswahl gehoert
// nicht in die Vorgabe.
?>
<input type="checkbox" name="scopes[]" value="<?= e($value) ?>" <?= $value === 'bugtracker:manage' ? 'checked' : '' ?> style="margin-top:3px;">
<span>
<strong><?= e($labels[0]) ?></strong>
<span style="display:block; font-size:0.72rem; color:var(--text-muted); margin-top:2px;"><?= e($labels[1]) ?></span>
@@ -5901,7 +5936,7 @@ SYSTEM
'tokens': [
{ id: 'sub-tokens-masters', label: '👑 Master-Tokens', active: true },
{ id: 'sub-tokens-subs', label: '🔑 Sub-Tokens' },
{ id: 'sub-tokens-create', label: '➕ Master-Token Erstellen' }
{ id: 'sub-tokens-create', label: '➕ Token erstellen' }
],
'system': [
{ id: 'sub-system-status', label: '⚙️ System-Status', active: true },