| --- |
| title: สิทธิ์ |
| description: ควบคุมการดำเนินการที่ต้องได้รับการอนุมัติจึงจะรันได้ |
| --- |
| |
| OpenCode ใช้การกำหนดค่า `permission` เพื่อตัดสินใจว่าการดำเนินการที่กำหนดควรทำงานโดยอัตโนมัติ แจ้งให้คุณทราบ หรือถูกบล็อก |
|
|
| ตั้งแต่ `v1.1.1` การกำหนดค่าบูลีนแบบเดิม `tools` เลิกใช้แล้วและได้รวมเข้ากับ `permission` แล้ว การกำหนดค่า `tools` แบบเก่ายังคงรองรับความเข้ากันได้แบบย้อนหลัง |
|
|
| --- |
| |
| |
|
|
| กฎการอนุญาตแต่ละข้อจะแก้ไขเป็นข้อใดข้อหนึ่งต่อไปนี้ |
|
|
| - `"allow"` — ทำงานโดยไม่ได้รับการอนุมัติ |
| - `"ask"` — พร้อมท์สำหรับการอนุมัติ |
| - `"deny"` — บล็อกการกระทำ |
|
|
| --- |
| |
| |
|
|
| คุณสามารถตั้งค่าการอนุญาตทั่วโลก (ด้วย `*`) และแทนที่เครื่องมือเฉพาะ |
|
|
| ```json title="opencode.json" |
| { |
| "$schema": "https://opencode.ai/config.json", |
| "permission": { |
| "*": "ask", |
| "bash": "allow", |
| "edit": "deny" |
| } |
| } |
| ``` |
|
|
| คุณยังสามารถตั้งค่าการอนุญาตทั้งหมดพร้อมกันได้: |
|
|
| ```json title="opencode.json" |
| { |
| "$schema": "https://opencode.ai/config.json", |
| "permission": "allow" |
| } |
| ``` |
|
|
| --- |
| |
| |
|
|
| สำหรับการอนุญาตส่วนใหญ่ คุณสามารถใช้ออบเจ็กต์เพื่อปรับใช้การดำเนินการต่างๆ ตามอินพุตของเครื่องมือได้ |
|
|
| ```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" |
| } |
| } |
| } |
| ``` |
|
|
| กฎจะได้รับการประเมินโดยการจับคู่รูปแบบ โดย **กฎการจับคู่สุดท้ายจะชนะ** รูปแบบทั่วไปคือการใส่กฎ catch-all `"*"` ก่อน และใส่กฎที่เฉพาะเจาะจงมากขึ้นหลังจากนั้น |
|
|
| |
|
|
| รูปแบบการอนุญาตใช้การจับคู่ไวด์การ์ดแบบง่าย: |
|
|
| - `*` จับคู่อักขระใดๆ ตั้งแต่ศูนย์ขึ้นไป |
| - `?` ตรงกับอักขระหนึ่งตัวเท่านั้น |
| - อักขระอื่นๆ ทั้งหมดตรงกันอย่างแท้จริง |
|
|
| |
|
|
| คุณสามารถใช้ `~` หรือ `$HOME` ที่จุดเริ่มต้นของรูปแบบเพื่ออ้างอิงโฮมไดเร็กตอรี่ของคุณ สิ่งนี้มีประโยชน์อย่างยิ่งสำหรับกฎของ [`external_directory`](#external-directories) |
|
|
| - `~/projects/*` -> `/Users/username/projects/*` |
| - `$HOME/projects/*` -> `/Users/username/projects/*` |
| - `~` -> `/Users/username` |
|
|
| |
|
|
| ใช้ `external_directory` เพื่ออนุญาตการเรียกใช้เครื่องมือที่สัมผัสเส้นทางนอกไดเร็กทอรีการทำงานที่ OpenCode เริ่มทำงาน สิ่งนี้ใช้ได้กับเครื่องมือใดๆ ที่ใช้เส้นทางเป็นอินพุต (เช่น `read`, `edit`, `glob`, `grep` และคำสั่ง `bash` จำนวนมาก) |
|
|
| การขยายบ้าน (เช่น `~/...`) ส่งผลต่อวิธีการเขียนรูปแบบเท่านั้น ไม่ได้ทำให้เส้นทางภายนอกเป็นส่วนหนึ่งของพื้นที่ทำงานปัจจุบัน ดังนั้นเส้นทางภายนอกไดเรกทอรีการทำงานยังต้องได้รับอนุญาตผ่าน `external_directory` |
|
|
| ตัวอย่างเช่น อนุญาตให้เข้าถึงทุกสิ่งภายใต้ `~/projects/personal/`: |
|
|
| ```json title="opencode.json" |
| { |
| "$schema": "https://opencode.ai/config.json", |
| "permission": { |
| "external_directory": { |
| "~/projects/personal/**": "allow" |
| } |
| } |
| } |
| ``` |
|
|
| ไดเร็กทอรีใดๆ ที่ได้รับอนุญาตที่นี่จะสืบทอดค่าเริ่มต้นเดียวกันกับพื้นที่ทำงานปัจจุบัน เนื่องจาก [`read` มีค่าเริ่มต้นเป็น `allow`](#defaults) การอ่านจึงได้รับอนุญาตสำหรับรายการภายใต้ `external_directory` เว้นแต่จะถูกแทนที่ เพิ่มกฎที่ชัดเจนเมื่อควรจำกัดเครื่องมือในเส้นทางเหล่านี้ เช่น การบล็อกการแก้ไขในขณะที่ยังคงอ่านอยู่: |
|
|
| ```json title="opencode.json" |
| { |
| "$schema": "https://opencode.ai/config.json", |
| "permission": { |
| "external_directory": { |
| "~/projects/personal/**": "allow" |
| }, |
| "edit": { |
| "~/projects/personal/**": "deny" |
| } |
| } |
| } |
| ``` |
|
|
| ให้รายการมุ่งเน้นไปที่เส้นทางที่เชื่อถือได้ และเลเยอร์อนุญาตหรือปฏิเสธกฎเพิ่มเติมตามที่จำเป็นสำหรับเครื่องมืออื่นๆ (เช่น `bash`) |
|
|
| --- |
| |
| |
|
|
| สิทธิ์ของ OpenCode จะกำหนดไว้ตามชื่อเครื่องมือ พร้อมด้วย guardrails อีก 2-3 คน: |
|
|
| - `read` — อ่านไฟล์ (ตรงกับเส้นทางของไฟล์) |
| - `edit` — การแก้ไขไฟล์ทั้งหมด (ครอบคลุมถึง `edit`, `write`, `patch`) |
| - `glob` — ไฟล์ globbing (ตรงกับรูปแบบ glob) |
| - `grep` — การค้นหาเนื้อหา (ตรงกับรูปแบบ regex) |
| - `bash` — การรันคำสั่ง shell (ตรงกับคำสั่งที่แยกวิเคราะห์เช่น `git status --porcelain`) |
| - `task` — การเปิดตัวตัวแทนย่อย (ตรงกับประเภทตัวแทนย่อย) |
| - `skill` — กำลังโหลดทักษะ (ตรงกับชื่อทักษะ) |
| - `lsp` — กำลังเรียกใช้คำสั่ง LSP (ปัจจุบันยังไม่ละเอียด) |
| - `webfetch` — กำลังดึง URL (ตรงกับ URL) |
| - `websearch` — การค้นหาเว็บ (ตรงกับข้อความค้นหา) |
| - `external_directory` — ทริกเกอร์เมื่อเครื่องมือแตะเส้นทางนอกไดเร็กทอรีการทำงานของโปรเจ็กต์ |
| - `doom_loop` — ทริกเกอร์เมื่อมีการเรียกใช้เครื่องมือเดียวกันซ้ำ 3 ครั้งโดยมีอินพุตเหมือนกัน |
|
|
| --- |
| |
| |
|
|
| หากคุณไม่ได้ระบุสิ่งใด OpenCode จะเริ่มต้นจากค่าเริ่มต้นที่อนุญาต: |
|
|
| - การอนุญาตส่วนใหญ่มีค่าเริ่มต้นเป็น `"allow"` |
| - `doom_loop` และ `external_directory` มีค่าเริ่มต้นเป็น `"ask"` |
| - `read` คือ `"allow"` แต่ไฟล์ `.env` ถูกปฏิเสธโดยค่าเริ่มต้น: |
|
|
| ```json title="opencode.json" |
| { |
| "permission": { |
| "read": { |
| "*": "allow", |
| "*.env": "deny", |
| "*.env.*": "deny", |
| "*.env.example": "allow" |
| } |
| } |
| } |
| ``` |
|
|
| --- |
| |
| |
|
|
| เมื่อ OpenCode แจ้งให้อนุมัติ UI จะเสนอผลลัพธ์สามประการ: |
|
|
| - `once` — อนุมัติเพียงคำขอนี้ |
| - `always` — อนุมัติคำขอในอนาคตที่ตรงกับรูปแบบที่แนะนำ (สำหรับส่วนที่เหลือของเซสชัน OpenCode ปัจจุบัน) |
| - `reject` — ปฏิเสธคำขอ |
|
|
| ชุดรูปแบบที่ `always` จะอนุมัตินั้นมาจากเครื่องมือ (เช่น โดยทั่วไปการอนุมัติ bash จะกำหนดไวท์ลิสต์คำนำหน้าคำสั่งที่ปลอดภัย เช่น `git status*`) |
|
|
| --- |
| |
| |
|
|
| คุณสามารถแทนที่สิทธิ์ต่อตัวแทนได้ สิทธิ์ของตัวแทนจะผสานเข้ากับการกำหนดค่าส่วนกลาง และกฎของตัวแทนจะมีความสำคัญกว่า [เรียนรู้เพิ่มเติม](/docs/agents#permissions) เกี่ยวกับการอนุญาตของตัวแทน |
|
|
| :::note |
| โปรดดูส่วน [กฎแบบละเอียด (ไวยากรณ์ของวัตถุ)](#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" |
| } |
| } |
| } |
| } |
| } |
| ``` |
|
|
| คุณยังสามารถกำหนดค่าการอนุญาตตัวแทนใน Markdown ได้: |
|
|
| ```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 |
| ใช้การจับคู่รูปแบบสำหรับคำสั่งที่มีอาร์กิวเมนต์ `"grep *"` อนุญาต `grep pattern file.txt` ในขณะที่ `"grep"` คนเดียวจะบล็อกได้ คำสั่งเช่น `git status` ใช้งานได้กับพฤติกรรมเริ่มต้น แต่ต้องได้รับอนุญาตอย่างชัดเจน (เช่น `"git status *"`) เมื่ออาร์กิวเมนต์ถูกส่งผ่าน |
| ::: |
|
|