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:
co-authored by
Claude Opus 5
parent
93aabfece3
commit
eeda6c911e
@@ -33,7 +33,11 @@ gelesen zu haben.
|
|||||||
|
|
||||||
## 1. Werkbank-Token anlegen
|
## 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 |
|
| Feld | Wert |
|
||||||
|---|---|
|
|---|---|
|
||||||
|
|||||||
+39
-4
@@ -5401,7 +5401,25 @@ Antwort:
|
|||||||
|
|
||||||
<div id="sub-tokens-create" class="subtab-content">
|
<div id="sub-tokens-create" class="subtab-content">
|
||||||
<div class="card">
|
<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">
|
<form method="POST" action="index.php#tab-tokens">
|
||||||
<?= $csrfField ?>
|
<?= $csrfField ?>
|
||||||
<input type="hidden" name="action" value="create_master_token">
|
<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;">
|
<div style="display:grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap:0.5rem;">
|
||||||
<?php
|
<?php
|
||||||
$scopeChoices = [
|
$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: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:report' => ['🐛 Bugtracker melden', 'Nur Einträge anlegen — schließt Lesen ein'],
|
||||||
'bugtracker:read' => ['👁️ Bugtracker lesen', 'Nur Abfragen'],
|
'bugtracker:read' => ['👁️ Bugtracker lesen', 'Nur Abfragen'],
|
||||||
'watchdog:ping' => ['🛡️ Watchdog Heartbeat', 'Statusmeldungen senden'],
|
'watchdog:ping' => ['🛡️ Watchdog Heartbeat', 'Statusmeldungen senden'],
|
||||||
'watchdog:read' => ['📊 Watchdog lesen', 'Monitore und Ereignisse abfragen'],
|
'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:read' => ['📦 Updates prüfen', 'Auf neue Releases prüfen'],
|
||||||
'updateservice:publish' => ['🚀 Releases veröffentlichen', 'Neue Releases einstellen — schließt Prüfen ein'],
|
'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'],
|
'license:dev' => ['🧪 DEV-Lizenz abholen', 'Befristeten Testschlüssel selbst ausstellen — nur für Werkbank-Token auf Testmaschinen'],
|
||||||
];
|
];
|
||||||
foreach ($scopeChoices as $value => $labels): ?>
|
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;">
|
<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>
|
<span>
|
||||||
<strong><?= e($labels[0]) ?></strong>
|
<strong><?= e($labels[0]) ?></strong>
|
||||||
<span style="display:block; font-size:0.72rem; color:var(--text-muted); margin-top:2px;"><?= e($labels[1]) ?></span>
|
<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': [
|
'tokens': [
|
||||||
{ id: 'sub-tokens-masters', label: '👑 Master-Tokens', active: true },
|
{ id: 'sub-tokens-masters', label: '👑 Master-Tokens', active: true },
|
||||||
{ id: 'sub-tokens-subs', label: '🔑 Sub-Tokens' },
|
{ id: 'sub-tokens-subs', label: '🔑 Sub-Tokens' },
|
||||||
{ id: 'sub-tokens-create', label: '➕ Master-Token Erstellen' }
|
{ id: 'sub-tokens-create', label: '➕ Token erstellen' }
|
||||||
],
|
],
|
||||||
'system': [
|
'system': [
|
||||||
{ id: 'sub-system-status', label: '⚙️ System-Status', active: true },
|
{ id: 'sub-system-status', label: '⚙️ System-Status', active: true },
|
||||||
|
|||||||
Reference in New Issue
Block a user