Naar hoofdinhoud gaan

Permission requests

Standaardgedrag (deny-all)

Als permission_approve in config/copilot.php op "deny-all" (de standaard) staat, worden permission requests bij Copilot::run() en Copilot::start() automatisch geweigerd. Voor toepassingen die vooral tekst genereren zijn permissies vaak niet nodig, dus dit is een veilige standaard.

Mogelijke waarden

Als je prompts van gebruikers accepteert, zijn "approve-safety" en "approve-all" gevaarlijk. Gebruik dan altijd false of "deny-all". Zelfs met read-only permissies kan de code van je Laravel-project worden gelezen.

PermissionHandler::approveAll()

PermissionHandler::approveAll() staat alle requests automatisch toe.

PermissionHandler::approveSafety()

PermissionHandler::approveSafety() weigert alleen permissies met een hoog risico (shell, write) en staat de rest automatisch toe.
Ook dit is niet gegarandeerd volledig veilig. Wil je strikte controle, implementeer dan een custom handler en beoordeel op basis van $request['kind'].

PermissionHandler::denyAll()

PermissionHandler::denyAll() weigert alles.

De Client direct gebruiken

Als je CopilotClient direct gebruikt, is het opgeven van onPermissionRequest verplicht, net als in de officiële SDK.

Custom handler

Geef een closure door om toestaan of weigeren per requesttype te bepalen. $request en $invocation zijn arrays zoals hieronder.

$request

De velden buiten kind en toolCallId verschillen afhankelijk van kind.
Als $request['managedApprovalRequired'] true is, kan dit verzoek door de Managed Settings van de organisatie niet automatisch worden goedgekeurd. PermissionHandler::approveAll() retourneert in dat geval no-result en laat de afhandeling over aan de standaardflow van de Copilot CLI.

$invocation

Promptcontext (promptRequest)

In nieuwere CLI-runtimes kan $invocation['promptRequest'] de context bevatten van de prompt die aan de gebruiker wordt getoond. In een eigen handler kun je aan de hand van deze waarde bepalen of een menselijke reactie nodig is. PermissionHandler::approveAll() geeft voorrang aan promptRequest['managedApprovalRequired'] als aan alle volgende voorwaarden is voldaan:
  • promptRequest['kind'] is een van commands / read / write / url / workflow
  • promptRequest['managedApprovalRequired'] is een boolean
Zo kan het verzoek automatisch worden goedgekeurd als de prompt geen menselijke reactie vereist, ook als $request['managedApprovalRequired'] als marker uit het beleid blijft staan. De ruwe marker in $request blijft behouden. Bij oudere CLI’s zonder promptRequest, niet-ondersteunde types of als er geen geldige boolean-waarde is, wordt zoals voorheen op basis van $request['managedApprovalRequired'] beslist.

Response

Het resultaat van de permissiebeslissing retourneer je als array. Met de klasse PermissionRequestResultKind wordt dit beter leesbaar.

Protocoldetails

In Protocol v3 (de huidige standaard) worden permission requests niet als JSON-RPC-requests maar als session-events (permission.requested) afgeleverd. De SDK verwerkt dit intern en antwoordt via de RPC session.permissions.handlePendingPermissionRequest. Het gebruik van SessionConfig verandert niet. Als je een handler doorgeeft aan onPermissionRequest, vangt de SDK de protocolverschillen op.

PermissionRequestResultKind

Je kunt ook direct de vorm ['kind' => 'approve-once'] retourneren, maar met PermissionRequestResultKind wordt het duidelijker.

Beschikbare methodes

Wil je Laravel\Prompts\select gebruiken, dan kun je de opties ophalen met PermissionRequestResultKind::select().

no-result

Als de handler geen resultaat kan geven (bijvoorbeeld in een niet-interactieve omgeving), kun je no-result retourneren. Bij no-result wordt de RPC-aanroep overgeslagen en geldt de standaardweigering aan de kant van de Copilot CLI.
Raadpleeg de GitHub-repository voor de meest actuele informatie.
Laatst gewijzigd op 19 oktober 2026