237 lines
8.8 KiB
Markdown
237 lines
8.8 KiB
Markdown
---
|
|
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"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
تُقيَّم القواعد عبر مطابقة الأنماط، مع كون **آخر قاعدة مطابقة هي التي تُطبَّق**. من الشائع وضع قاعدة الشمول `"*"` أولًا ثم القواعد الأكثر تحديدًا بعدها.
|
|
|
|
### أحرف البدل
|
|
|
|
تستخدم أنماط الأذونات مطابقة بسيطة لأحرف البدل:
|
|
|
|
- `*` يطابق صفرًا أو أكثر من أي حرف
|
|
- `?` يطابق حرفًا واحدًا بالضبط
|
|
- جميع الأحرف الأخرى تُطابق حرفيًا
|
|
|
|
### توسيع مجلد المنزل
|
|
|
|
يمكنك استخدام `~` أو `$HOME` في بداية النمط للإشارة إلى مجلد المنزل. هذا مفيد خصوصًا لقواعد [`external_directory`](#external-directories).
|
|
|
|
- `~/projects/*` -> `/Users/username/projects/*`
|
|
- `$HOME/projects/*` -> `/Users/username/projects/*`
|
|
- `~` -> `/Users/username`
|
|
|
|
### الأدلة الخارجية
|
|
|
|
استخدم `external_directory` للسماح باستدعاءات الأدوات التي تلمس مسارات خارج دليل العمل الذي بدأ منه OpenCode. ينطبق ذلك على أي أداة تأخذ مسارًا كمدخل (مثل `read` و`edit` و`list` و`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"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
اجعل القائمة مقتصرة على المسارات الموثوقة، ثم أضِف طبقات إضافية من قواعد `allow` أو `deny` حسب الحاجة لأدوات أخرى (مثل `bash`).
|
|
|
|
---
|
|
|
|
## الأذونات المتاحة
|
|
|
|
تُعرَّف أذونات OpenCode بأسماء الأدوات، بالإضافة إلى بعض حواجز الأمان:
|
|
|
|
- `read` — قراءة ملف (يطابق مسار الملف)
|
|
- `edit` — جميع تعديلات الملفات (يشمل `edit` و`write` و`patch` و`multiedit`)
|
|
- `glob` — مطابقة أسماء الملفات (يطابق نمط الـ glob)
|
|
- `grep` — البحث في المحتوى (يطابق نمط regex)
|
|
- `list` — سرد الملفات في دليل (يطابق مسار الدليل)
|
|
- `bash` — تشغيل أوامر shell (يطابق الأوامر المُحلَّلة مثل `git status --porcelain`)
|
|
- `task` — تشغيل وكلاء فرعيين (يطابق نوع الوكيل الفرعي)
|
|
- `skill` — تحميل مهارة (يطابق اسم المهارة)
|
|
- `lsp` — تشغيل استعلامات LSP (حاليًا دون قواعد دقيقة)
|
|
- `webfetch` — جلب عنوان URL (يطابق الـ URL)
|
|
- `websearch`, `codesearch` — بحث الويب/الكود (يطابق الاستعلام)
|
|
- `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"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## ماذا تفعل `"ask"`
|
|
|
|
عندما يطلب OpenCode الموافقة، تعرض الواجهة ثلاث نتائج ممكنة:
|
|
|
|
- `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 *"`) عند تمرير معاملات.
|
|
:::
|