Files
tf_code/packages/web/src/content/docs/de/permissions.mdx

238 lines
7.8 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: Berechtigungen
description: Steuern Sie, für welche Aktionen eine Genehmigung erforderlich ist.
---
OpenCode verwendet die `permission`-Konfiguration, um zu entscheiden, ob eine bestimmte Aktion automatisch ausgeführt werden soll, Sie dazu auffordern oder blockiert werden soll.
Ab `v1.1.1` ist die alte boolesche Konfiguration `tools` veraltet und wurde in `permission` zusammengeführt. Die alte `tools`-Konfiguration wird aus Gründen der Abwärtskompatibilität weiterhin unterstützt.
---
## Aktionen
Jede Berechtigungsregel wird zu einem der folgenden aufgelöst:
- `"allow"` ohne Genehmigung ausführen
- `"ask"` — um Genehmigung bitten
- `"deny"` Aktion blockieren
---
## Konfiguration
Sie können Berechtigungen global festlegen (mit `*`) und bestimmte Tools überschreiben.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"*": "ask",
"bash": "allow",
"edit": "deny"
}
}
```
Sie können auch alle Berechtigungen auf einmal festlegen:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": "allow"
}
```
---
## Granulare Regeln (Objektsyntax)
Bei den meisten Berechtigungen können Sie ein Objekt verwenden, um basierend auf der Werkzeugeingabe verschiedene Aktionen anzuwenden.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"bash": {
"*": "ask",
"git *": "allow",
"npm *": "allow",
"rm *": "deny",
"grep *": "allow"
},
"edit": {
"*": "deny",
"packages/web/src/content/docs/*.mdx": "allow"
}
}
}
```
Regeln werden nach Musterübereinstimmung ausgewertet, wobei die **letzte übereinstimmende Regel gewinnt**. Ein gängiges Muster besteht darin, zuerst die Catch-All-Regel `"*"` und danach spezifischere Regeln zu platzieren.
### Platzhalter
Berechtigungsmuster verwenden einen einfachen Platzhalterabgleich:
- `*` matches zero or more of any character
- `?` matches exactly one character
- Alle anderen Zeichen stimmen wörtlich überein
### Erweiterung des Home-Verzeichnisses
Sie können `~` oder `$HOME` am Anfang eines Musters verwenden, um auf Ihr Home-Verzeichnis zu verweisen. Dies ist besonders nützlich für [`external_directory`](#external-directories)-Regeln.
- `~/projects/*` -> `/Users/username/projects/*`
- `$HOME/projects/*` -> `/Users/username/projects/*`
- `~` -> `/Users/username`
### Externe Verzeichnisse
Verwenden Sie `external_directory`, um Toolaufrufe zuzulassen, die Pfade außerhalb des Arbeitsverzeichnisses berühren, in dem OpenCode gestartet wurde. Dies gilt für jedes Werkzeug, das einen Pfad als Eingabe verwendet (z. B. `read`, `edit`, `list`, `glob`, `grep` und viele `bash`-Befehle).
Die Home-Erweiterung (wie `~/...`) wirkt sich nur darauf aus, wie ein Muster geschrieben wird. Dadurch wird ein externer Pfad nicht zum Teil des aktuellen Arbeitsbereichs, daher müssen Pfade außerhalb des Arbeitsverzeichnisses weiterhin über `external_directory` zulässig sein.
Dies ermöglicht beispielsweise den Zugriff auf alles unter `~/projects/personal/`:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow"
}
}
}
```
Jedes hier zulässige Verzeichnis erbt dieselben Standardeinstellungen wie der aktuelle Arbeitsbereich. Seit [`read` defaults to `allow`](#defaults) sind Lesevorgänge auch für Einträge unter `external_directory` zulässig, sofern sie nicht überschrieben werden. Fügen Sie explizite Regeln hinzu, wenn ein Tool in diesen Pfaden eingeschränkt werden soll, z. B. das Blockieren von Bearbeitungen, während Lesevorgänge beibehalten werden:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow"
},
"edit": {
"~/projects/personal/**": "deny"
}
}
}
```
Konzentrieren Sie sich in der Liste auf vertrauenswürdige Pfade und fügen Sie bei Bedarf zusätzliche Zulassungs- oder Ablehnungsregeln für andere Tools hinzu (z. B. `bash`).
---
## Verfügbare Berechtigungen
OpenCode-Berechtigungen basieren auf Tool-Namen sowie einigen Sicherheitsvorkehrungen:
- `read` eine Datei lesen (entspricht dem Dateipfad)
- `edit` alle Dateiänderungen (umfasst `edit`, `write`, `patch`, `multiedit`)
- `glob` Datei-Globbing (entspricht dem Glob-Muster)
- `grep` Inhaltssuche (entspricht dem Regex-Muster)
- `list` Auflistung der Dateien in einem Verzeichnis (entspricht dem Verzeichnispfad)
- `bash` Ausführen von Shell-Befehlen (entspricht analysierten Befehlen wie `git status --porcelain`)
- `task` Subagenten starten (entspricht dem Subagententyp)
- `skill` Laden einer Fertigkeit (entspricht dem Fertigkeitsnamen)
- `lsp` Ausführen von LSP-Abfragen (derzeit nicht granular)
- `todoread`, `todowrite` lesen/aktualisieren der Aufgabenliste
- `webfetch` Abrufen eines URL (entspricht dem URL)
- `websearch`, `codesearch` web/code Suche (entspricht der Abfrage)
- `external_directory` wird ausgelöst, wenn ein Tool Pfade außerhalb des Projektarbeitsverzeichnisses berührt
- `doom_loop` wird ausgelöst, wenn derselbe Werkzeugaufruf dreimal mit identischer Eingabe wiederholt wird
---
## Standardwerte
Wenn Sie nichts angeben, beginnt OpenCode mit zulässigen Standardeinstellungen:
- Die meisten Berechtigungen sind standardmäßig auf `"allow"` eingestellt.
- `doom_loop` und `external_directory` sind standardmäßig `"ask"`.
- `read` ist `"allow"`, aber `.env`-Dateien werden standardmäßig verweigert:
```json title="opencode.json"
{
"permission": {
"read": {
"*": "allow",
"*.env": "deny",
"*.env.*": "deny",
"*.env.example": "allow"
}
}
}
```
---
## Was „Fragen“ bewirkt
Wenn OpenCode zur Genehmigung auffordert, bietet UI drei Ergebnisse:
- `once` nur diese Anfrage genehmigen
- `always` zukünftige Anfragen genehmigen, die den vorgeschlagenen Mustern entsprechen (für den Rest der aktuellen OpenCode-Sitzung)
- `reject` die Anfrage ablehnen
Der Satz von Mustern, die `always` genehmigen würde, wird vom Tool bereitgestellt (Beispiel: Bash-Genehmigungen setzen normalerweise ein sicheres Befehlspräfix wie `git status*` auf die Whitelist).
---
## Agenten
Sie können Berechtigungen pro Agent überschreiben. Agentenberechtigungen werden mit der globalen Konfiguration zusammengeführt und Agentenregeln haben Vorrang. [Learn more](/docs/agents#permissions) über Agentenberechtigungen.
:::note
Ausführlichere Mustervergleichsbeispiele finden Sie oben im Abschnitt [Granular Rules (Object Syntax)](#granular-rules-object-syntax).
:::
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"bash": {
"*": "ask",
"git *": "allow",
"git commit *": "deny",
"git push *": "deny",
"grep *": "allow"
}
},
"agent": {
"build": {
"permission": {
"bash": {
"*": "ask",
"git *": "allow",
"git commit *": "ask",
"git push *": "deny",
"grep *": "allow"
}
}
}
}
}
```
Sie können Agentenberechtigungen auch in Markdown konfigurieren:
```markdown title="~/.config/opencode/agents/review.md"
---
description: Code review without edits
mode: subagent
permission:
edit: deny
bash: ask
webfetch: deny
---
Only analyze code and suggest changes.
```
:::tip
Verwenden Sie den Mustervergleich für Befehle mit Argumenten. `"grep *"` erlaubt `grep pattern file.txt`, während `"grep"` allein es blockieren würde. Befehle wie `git status` funktionieren für das Standardverhalten, erfordern jedoch eine explizite Erlaubnis (wie `"git status *"`), wenn Argumente übergeben werden.
:::