Buckets:
| 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` و`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`) | |
| - `glob` — مطابقة أسماء الملفات (يطابق نمط الـ 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" | |
| } | |
| } | |
| } | |
| ``` | |
| ## ماذا تفعل `"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 *"`) عند تمرير معاملات. | |
| ::: | |
Xet Storage Details
- Size:
- 8.91 kB
- Xet hash:
- 46fe66dad3d12c11995b79d4fecd86df3b6b7c8f20c245688b73537fefb92e92
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.