التفويض — من يجوز له أن يفعل ماذا، وكيف تثبت ذلك
يجيب Control Center عن سؤالين في التفويض، وهما مختلفان فعلًا. «هل يجوز لهذا الشخص استدعاء هذه العملية؟» يخص البشر والأدوار والمستودعات. «هل يجوز لهذا الوكيل إحداث هذا الأثر؟» يخص الإجراءات والوسائط ونطاق الأثر، وذلك موضوع الضوابط.
هذه الصفحة للسؤال الأول، وللسجل الذي يتركه السؤالان معًا.
نقطة قرار واحدة
قسم بعنوان “نقطة قرار واحدة”كل قرار تفويض من جهة البشر يُحسم عبر دالة واحدة:
can(principal, permission, resource) → allow | deny + whyالصلاحية على شكل <domain>:<tier>، مثل tickets:write
وmembers:administer وrepos:read. الفهرس مشتق لا يُكتب يدويًا:
يُحسب من سطح العمليات نفسه (بادئة اسم العملية تعطي المجال، والحد الأدنى
للدور الذي تفرضه أصلًا يعطي المستوى)، فتحمل العمليات كلها، وهي نحو 550،
صلاحية من غير أن يكتبها أحد.
هذا الاشتقاق هو ما يستحق الحماية. معناه أن أي عملية جديدة تمر بالبوابة افتراضيًا. نمط الفشل في النموذج الموسوم يدويًا أن ينسى أحدهم، وما ينساه هو البوابة. يثبّت اختبار السقاطة مجموعة المجالات الناتجة، فإضافة عملية تحت بادئة جديدة هي قرار تسمية يتخذه إنسان، لا مصادفة.
تتطابق المستويات الأربعة مع الأدوار المضمّنة تمامًا:
| المستوى | الحد الأدنى للدور | مثال |
|---|---|---|
read |
ضيف | tickets:read |
write |
عضو | tickets:write |
administer |
مسؤول | members:administer |
own |
مالك | workspace:own |
الأدوار
قسم بعنوان “الأدوار”خمسة أدوار مضمّنة — مالك، مسؤول، عضو، مشاهد، ضيف — هي قوالب جاهزة فوق ذلك الفهرس. الملكية مقعد واحد في كل مساحة عمل، وتُسلَّم صراحة عبر نقل الملكية (بغير ذلك لا يُزال المالك الذي يغادر: إلغاء التوفير عبر SCIM يرفض أي مالك لمساحة عمل، فانقل الملكية أولًا).
الأدوار المخصصة تحذف ولا تضيف. يسمّي الدور المخصص قالبًا أساسيًا
(admin أو member أو viewer أو guest، ولا يكون owner أبدًا)
ومجموعة صلاحيات تُحذف منه، مثل «مسؤول، لكن لا يستطيع إدارة الأعضاء».
لا يمنح أكثر من قالبه أبدًا، وهذا ما يجعل إدخالها في تثبيت قائم آمنًا:
يبقى كل فحص قائم حدًا أعلى سليمًا. يحملها الأعضاء بالصيغة custom:<id>،
والعميل الأقدم من أن يفهم هذه القيمة يعود إلى الضيف بدل أن يخمّن.
تحت الأدوار تقع المنح لكل مستودع (none / read / review /
write): عضوية مساحة العمل لا تعطي، بصمت، صلاحيات أوسع من مضيف الشفرة.
كل سطح يعرض الشفرة يفحصها، ومنها ما يلامس الشفرة من جانب، كالطرفية أو
جلسة محرر تُفتح على شجرة عمل المساحة.
سلطة الخادم
قسم بعنوان “سلطة الخادم”بعض العمليات لا تخص مساحة عمل أصلًا: إعدادات على نطاق التثبيت، وتهيئة SSO، وبيانات اعتماد المزوّدين، وإدارة النماذج، والنسخ الاحتياطي للتثبيت كاملًا. هذه تعلن سلطة الخادم، وتُرفض للجميع إلا مشغّل التثبيت (مالك الخادم المسجَّل). هناك هوية مشغّل واحدة وتعريف واحد لها، عن قصد.
سجل التدقيق
قسم بعنوان “سجل التدقيق”كل قرار تفويض، السماح والرفض، يُلحَق بسجل تدقيق لكل مساحة عمل مربوط بسلسلة تجزئة.
سجل يقتصر على الرفض يجيب عن «ماذا حجبنا؟»، ولا يجيب عن «ماذا فعل هذا الوكيل فعلًا، ومن فوّضه؟»، ومراجعة الحادث تبدأ من السؤال الثاني. لذلك يسجّل كل إدخال سلسلة الإسناد كاملة: الفاعل المنفِّذ، والإنسان الذي تصرّف نيابة عنه، والإنابة التي وصل عبرها، والإجراء ووسائطه (على شكل ملخص تجزئة)، والقرار، والقاعدة التي حسمت.
الإدخالات متسلسلة: تغطي تجزئة كل إدخال تجزئة الذي سبقه، فتعديل أي صف أو حذفه أو إعادة ترتيبه يكسر كل تجزئة بعده. التحقق من السلسلة يعيد اشتقاق السلسلة كلها ويسمّي أول حلقة لا تثبت. سجل لا تستطيع التحقق منه يبقى سجلًا، وسجل تستطيع إعادة اشتقاقه يصير دليلًا.
نتيجتان تستحقان المعرفة:
- جدول التدقيق مستثنى من التقليم حسب العمر. لا تُقص سلسلة التجزئة من وسطها. الاحتفاظ يكون بالتصدير ثم الاقتطاع، ويترك الاقتطاع نقطة تفتيش تحمل التجزئة الختامية للمقطع المحذوف، فما يبقى يُتحقق منه رجوعًا إلى البداية.
- يقع سجل التدقيق بجوار الخط الزمني للنشاط، لا فوقه. الخط الزمني هو ما فعله الناس، وهذا ما فُوِّض وما رُفض. معرّف ارتباط مشترك يُقرأ به الاستدعاء الواحد في الاثنين.
يُصدَّر بصيغة JSON مفصولة بأسطر جديدة، ويمكن بثّه إلى SIEM (Splunk وElastic وSentinel، نقطة نهاية HTTP برمز وصول من نوع bearer). البث أفضل جهد عن قصد: تعطل SIEM يجب ألا يحجب استدعاء أداة لوكيل أبدًا، والنسخة الدائمة القابلة للتحقق تبقى على القرص في الحالتين.
الجلسات
قسم بعنوان “الجلسات”يستطيع التثبيت ضبط الحد الأقصى لعمر الجلسة ومهلة الخمول. يُفرض الاثنان عند فحص بيانات اعتماد الجهاز الذي تمر به كل قناة مصادَق عليها. حد جلسة يستطيع العميل تجاهله يجيب عن استبيان، لا عن مهاجم. ويستطيع التثبيت أيضًا اشتراط SSO، فيُعطَّل الاقتران اليدوي للأجهزة الجديدة (مع حارس من الإقفال: يُرفض ذلك ما دام لا يوجد اتصال SSO يعمل).
ما ليس هذا
قسم بعنوان “ما ليس هذا”- ليست قوائم تحكم في الوصول لكل كائن. لا توجد صلاحية لكل تذكرة أو لكل رسالة، عن قصد. الفصل على مستوى المستودع هو ما تطلبه الفرق فعلًا، وهو موجود. المشاركة لكل كائن سطح توافيقي لم يثبت لها طلب هنا.
- ليس محرك سياسات يُضبط بلغة نطاق مخصّصة. المفردات مغلقة عن قصد، حتى تُعرض السياسة كلها وتُشرح وتُعدَّد.
- لا يُفرض إلا على الخادم. فحوصات العميل موجودة فقط لتجنّب عرض عنصر تحكم سيُرفض. القرار المرجعي دائمًا قرار الخادم.