Skip to main content

Berechtigungsanfragen

Standardverhalten (deny-all)

Wenn permission_approve in config/copilot.php auf "deny-all" steht (Standard), werden Berechtigungsanfragen bei Copilot::run() und Copilot::start() automatisch abgelehnt. Da Anwendungen mit Fokus auf Textgenerierung häufig keine Berechtigungen benötigen, ist dies eine sichere Voreinstellung.

Mögliche Werte

Wenn Sie Nutzer-Prompts entgegennehmen, sind "approve-safety" und "approve-all" riskant. Verwenden Sie in diesem Fall unbedingt false oder "deny-all". Auch Read-Only-Berechtigungen können dazu führen, dass Code aus dem Laravel-Projekt gelesen wird.

PermissionHandler::approveAll()

PermissionHandler::approveAll() erlaubt automatisch alle Anfragen.

PermissionHandler::approveSafety()

PermissionHandler::approveSafety() lehnt ausschließlich risikoreiche Berechtigungen (shell, write) ab und erlaubt alles andere automatisch.
Auch damit ist die Sicherheit nicht vollständig gewährleistet. Für strengere Kontrolle implementieren Sie einen benutzerdefinierten Handler und werten $request['kind'] aus.

PermissionHandler::denyAll()

PermissionHandler::denyAll() lehnt alles ab.

Bei direkter Verwendung des Client

Wenn Sie CopilotClient direkt verwenden, ist die Angabe von onPermissionRequest – wie beim offiziellen SDK – erforderlich.

Benutzerdefinierter Handler

Um Genehmigungen und Ablehnungen je nach Anfrageart zu steuern, übergeben Sie eine Closure. $request und $invocation sind Arrays wie folgt.

$request

Neben kind und toolCallId variieren die Felder je nach kind.
Wenn $request['managedApprovalRequired'] true ist, kann diese Anfrage aufgrund der Managed Settings der Organisation nicht automatisch genehmigt werden. PermissionHandler::approveAll() gibt in diesem Fall no-result zurück und überlässt die Entscheidung dem Standardablauf der Copilot CLI.

$invocation

Prompt-Kontext (promptRequest)

In neueren CLI-Runtimes kann $invocation['promptRequest'] den Kontext des an den Nutzer gerichteten Prompts enthalten. In eigenen Handlern können Sie anhand dieses Werts entscheiden, ob eine menschliche Antwort erforderlich ist. PermissionHandler::approveAll() bevorzugt promptRequest['managedApprovalRequired'], wenn alle folgenden Bedingungen erfüllt sind:
  • promptRequest['kind'] ist einer von commands / read / write / url / workflow
  • promptRequest['managedApprovalRequired'] ist ein Boolean
Dadurch kann automatisch genehmigt werden, wenn im Prompt keine menschliche Antwort nötig ist, selbst wenn $request['managedApprovalRequired'] als richtlinienbasierte Markierung bestehen bleibt. Die rohe Markierung in $request bleibt weiterhin erhalten. Bei älteren CLIs ohne promptRequest, nicht unterstützten Arten oder ohne gültigen Boolean-Wert wird wie bisher anhand von $request['managedApprovalRequired'] entschieden.

Antwort

Die Entscheidung wird als Array zurückgegeben. Mit der Klasse PermissionRequestResultKind bleibt der Code lesbar.

Protokoll-Details

Ab Protocol v3 (aktueller Standard) werden Berechtigungsanfragen nicht als JSON-RPC-Requests, sondern als Session-Events (permission.requested) ausgeliefert. Das SDK verarbeitet dies intern und antwortet über den RPC-Aufruf session.permissions.handlePendingPermissionRequest. Die Verwendung von SessionConfig ändert sich dabei nicht. Übergeben Sie einfach einen Handler an onPermissionRequest; die Protokollunterschiede fängt das SDK ab.

PermissionRequestResultKind

Sie können direkt ['kind' => 'approve-once'] zurückgeben, aber mit PermissionRequestResultKind wird der Code verständlicher.

Verfügbare Methoden

Wenn Sie Laravel\Prompts\select verwenden möchten, können Sie die Auswahloptionen über PermissionRequestResultKind::select() abrufen.

no-result

Wenn der Handler kein Ergebnis liefern kann (z. B. in nicht-interaktiven Umgebungen), können Sie no-result zurückgeben. Bei no-result wird der RPC-Aufruf übersprungen, und die Copilot-CLI-seitige Standardablehnung greift.
Aktuelle Informationen finden Sie im GitHub-Repository.
Zuletzt geändert am 19. Oktober 2026