Files
tf_code/packages/web/src/content/docs/bs/permissions.mdx
2026-02-09 13:55:55 -06:00

231 lines
7.1 KiB
Plaintext

---
title: Dozvole
description: Kontrolirajte koje radnje zahtijevaju odobrenje za pokretanje.
---
OpenCode koristi `permission` konfiguraciju da odluči da li će se određena radnja pokrenuti automatski, zatražiti od vas ili biti blokirana.
Od `v1.1.1`, naslijeđena `tools` logička konfiguracija je zastarjela i spojena je u `permission`. Stara `tools` konfiguracija je još uvijek podržana za kompatibilnost unatrag.
---
## Akcije
Svako pravilo dozvole rješava jedno od:
- `"allow"` — pokrenuti bez odobrenja
- `"ask"` — upit za odobrenje
- `"deny"` — blokiraj akciju
---
## Konfiguracija
Dozvole možete postaviti globalno (sa `*`) i nadjačati određene alate.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"*": "ask",
"bash": "allow",
"edit": "deny"
}
}
```
Također možete postaviti sve dozvole odjednom:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": "allow"
}
```
---
## Granularna pravila (sintaksa objekta)
Za većinu dozvola, možete koristiti objekt za primjenu različitih radnji na osnovu unosa alata.
```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"
}
}
}
```
Pravila se procjenjuju na osnovu podudaranja uzorka, pri čemu **pobjeđuje **poslednje odgovarajuće pravilo\*_. Uobičajeni obrazac je da se prvo pravilo `"_"` stavi sveobuhvatno, a poslije njega konkretnija pravila.
### Zamjenski znakovi
Uzorci dozvola koriste jednostavno podudaranje zamjenskih znakova:
- `*` odgovara nula ili više bilo kojeg znaka
- `?` odgovara tačno jednom znaku
- Svi ostali likovi se bukvalno podudaraju
### Proširenje kućnog imenika
Možete koristiti `~` ili `$HOME` na početku obrasca da referencirate svoj početni direktorij. Ovo je posebno korisno za [`external_directory`](#external-directories) pravila.
- `~/projects/*` -> `/Users/username/projects/*`
- `$HOME/projects/*` -> `/Users/username/projects/*`
- `~` -> `/Users/username`
### Vanjski imenici
Koristite `external_directory` da dozvolite pozive alata koji dodiruju putanje izvan radnog direktorija gdje je OpenCode pokrenut. Ovo se odnosi na bilo koji alat koji uzima putanju kao ulaz (na primjer `read`, `edit`, `list`, `glob`, `grep` i mnoge `bash` komande).
Proširenje kuće (poput `~/...`) utiče samo na način na koji je obrazac napisan. Ne čini vanjsku stazu dijelom trenutnog radnog prostora, tako da staze izvan radnog direktorija i dalje moraju biti dozvoljene preko `external_directory`.
Na primjer, ovo omogućava pristup svemu pod `~/projects/personal/`:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow"
}
}
}
```
Svaki direktorij koji je ovdje dozvoljen nasljeđuje iste zadane postavke kao trenutni radni prostor. Pošto je [`read` zadano na `allow`](#defaults), čitanje je također dozvoljeno za unose pod `external_directory` osim ako se ne poništi. Dodajte eksplicitna pravila kada bi alat trebao biti ograničen na ovim stazama, kao što je blokiranje uređivanja uz zadržavanje čitanja:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow"
},
"edit": {
"~/projects/personal/**": "deny"
}
}
}
```
## Neka lista bude fokusirana na pouzdane staze, a dodatni sloj dozvoljava ili odbija pravila prema potrebi za druge alate (na primjer `bash`).
## Dostupne dozvole
Dozvole OpenCode-a su označene imenom alata, plus nekoliko sigurnosnih mjera:
- `read` — čitanje datoteke (odgovara putanji datoteke)
- `edit` — sve izmjene fajlova (pokriva `edit`, `write`, `patch`, `multiedit`)
- `glob` — globbiranje fajla (odgovara glob uzorku)
- `grep` — pretraga sadržaja (podudara se sa regularnim izrazom)
- `list` — lista fajlova u direktorijumu (podudara se sa putanjom direktorijuma)
- `bash` — izvođenje komandi ljuske (podudara se s raščlanjenim komandama kao što je `git status --porcelain`)
- `task` — pokretanje subagenta (odgovara tipu podagenta)
- `skill` — učitavanje vještine (odgovara nazivu vještine)
- `lsp` — pokretanje LSP upita (trenutno negranularno)
- `todoread`, `todowrite` — čitanje/ažuriranje liste obaveza
- `webfetch` — dohvaćanje URL-a (odgovara URL-u)
- `websearch`, `codesearch` — pretraživanje weba/koda (odgovara upitu)
- `external_directory` — pokreće se kada alat dodirne staze izvan radnog direktorija projekta
- `doom_loop` — aktivira se kada se isti poziv alata ponovi 3 puta sa identičnim unosom
---
## Defaults
Ako ništa ne navedete, OpenCode počinje od dozvoljenih zadanih vrijednosti:
- Većina dozvola je zadana na `"allow"`.
- `doom_loop` i `external_directory` zadano na `"ask"`.
- `read` je `"allow"`, ali `.env` fajlovi su po defaultu odbijeni:
```json title="opencode.json"
{
"permission": {
"read": {
"*": "allow",
"*.env": "deny",
"*.env.*": "deny",
"*.env.example": "allow"
}
}
}
```
---
## Šta radi “Ask”.
Kada OpenCode zatraži odobrenje, korisničko sučelje nudi tri ishoda:
- `once` — odobri samo ovaj zahtjev
- `always` — odobri buduće zahtjeve koji odgovaraju predloženim obrascima (za ostatak trenutne OpenCode sesije)
- `reject` — odbiti zahtjev
Skup obrazaca koje bi `always` odobrio pruža alat (na primjer, bash odobrenja obično stavljaju na bijelu listu sigurni prefiks komande kao što je `git status*`).
---
## Agenti
Možete nadjačati dozvole po agentu. Dozvole agenta su spojene sa globalnom konfiguracijom, a pravila agenta imaju prednost. [Saznajte više](/docs/agents#permissions) o dozvolama agenta.
:::note
Pogledajte gornji odjeljak [Granularna pravila (sintaksa objekata)](#granular-rules-object-syntax) za detaljnije primjere podudaranja uzoraka.
:::
```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"
}
}
}
}
}
```
Također možete konfigurirati dozvole agenta u Markdownu:
```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
Koristite podudaranje uzoraka za naredbe s argumentima. `"grep *"` dozvoljava `grep pattern file.txt`, dok bi ga samo `"grep"` blokirao. Naredbe poput `git status` rade za zadano ponašanje, ali zahtijevaju eksplicitnu dozvolu (kao `"git status *"`) kada se prosljeđuju argumenti.
:::