بنناجح
المرحلة 3: Authorization وحماية الحسابات · الدرس 1 من 4 · 30 دقيقة

نماذج الـ Authorization

عرفنا المستخدم مين. السؤال دلوقتي: مسموحله بإيه؟ الدرس ده بيبدأ بالمبادئ الأربعة اللي كل قرار صلاحية مبني عليها، وبعدين بيمشي معاك في 4 نماذج: قوايم، ووظايف، وخصايص، وعلاقات.

في الدرس ده هتتعلم
  • تطبّق Deny by Default و Least Privilege و Complete Mediation و Server-side Only
  • تفرّق بين ACL و RBAC و ABAC و ReBAC وتعرف كل واحد بيحل أنهي مشكلة
  • تعرف مشكلة Role Explosion، وإمتى تنقل من RBAC لـ ABAC
  • تعرف ليه الملكية (Ownership) هي أهم قاعدة هتكتبها في shop-lab

1. المبادئ الأربعة

كل قرار Authorization فيه 3 حاجات: مين (المستخدم)، وإيه (العملية: يشوف، يعدّل، يمسح)، وعلى إيه (المنتج 55، الأوردر 1043). وقبل ما نتكلم عن أي طريقة، فيه 4 مبادئ كل الطرق مبنية عليهم:

المبدأ معناه في shop-lab
Deny by Default أي حاجة مش مسموحة صراحة تبقى ممنوعة route جديد في /admin نسيت تحميه؟ المفروض يتقفل لوحده عشان الـ group كله عليه middleware
Least Privilege ادّي كل حد أقل صلاحية تكفيه موظف خدمة العملاء يشوف الأوردرات، بس ميغيّرش الأسعار
Complete Mediation اتشيك في كل request، مش أول مرة بس الأدمن اللي اتشالت صلاحيته متفضلش الـ session بتاعته شغالة بصلاحية قديمة
Server-side Only التشيك على السيرفر، مش في الـ UI إنك تخبي زرار “مسح” عن العميل مش حماية. أي حد يقدر يبعت الـ request بنفسه

امنع أي حاجة مش مسموحة، وادّي أقل صلاحية ممكنة، واتشيك في كل request، وعلى السيرفر بس.

2. ACL و RBAC

ACL (Access Control List)

زي ملف Google Docs: لما تدوس “مشاركة”، بتشوف قايمة “فلان يقدر يعدّل، وفلان يقدر يقرا بس”. القايمة متعلقة بالملف نفسه.

مشكلتها: لو عندك 10,000 منتج و 20 موظف، هتدير 200,000 سطر. ولو موظف جديد اشتغل، هتضيفه في 10,000 قايمة.

RBAC (Role-Based Access Control)

زي الشركة بالظبط. محدش بيقول “أحمد يقدر يفتح الخزنة”. بيقولوا “المحاسب يقدر يفتح الخزنة”، وأحمد محاسب. ولو أحمد ساب الشغل، بتشيل منه الدور، وخلاص.

اختار مستخدم، وبعدين صلاحية، واتفرج على المسار وهو بينور. وبعدين خلّي منى تسيب الشغل:

RBAC: مستخدم ← دور ← صلاحيةدوس على مستخدم وصلاحية
users
rolesadminsupportcustomer
permissions
اختار مستخدم، وبعدين صلاحية.

بتستخدمه فين في المتجر:

  • admin: كل حاجة.
  • support: يشوف الأوردرات ويعمل refund، بس ميلمسش المنتجات.
  • customer: سلته وأوردراته بس.

ACL قايمة على كل حاجة، و RBAC وظايف بتشيل الصلاحيات، و RBAC بيكفي لحد ما القرار يحتاج تفاصيل.

3. ABAC و ReBAC

ABAC (Attribute-Based Access Control)

بدل “موظف support يعمل refund”، تقول قاعدة: “موظف support يعمل refund لو المبلغ أقل من 5,000 جنيه، والأوردر من نفس فرعه، وفي مواعيد الشغل”. حرّك الخصايص وشوف كل شرط بيتقيّم:

قاعدة ABAC بتتقيّمغيّر الخصايص
allow refund if role == support AND amount < 5000 AND order.branch == user.branch AND 9 ≤ hour < 18
  1. الدور support (أو admin)
  2. المبلغ أقل من 5,000 (أو admin)
  3. من نفس الفرع
  4. في مواعيد الشغل (9 لـ 6)
…
نوع الخاصية أمثلة
المستخدم الدور، الفرع، الأقدمية
الحاجة (Resource) مبلغ الأوردر، صاحبه، حالته (مدفوع؟ اتشحن؟)
العملية refund، cancel، view
الظروف الساعة كام، الـ IP، هل عامل MFA

وأبسط ABAC ممكن وأهمه هو الملكية (Ownership): “العميل يشوف الأوردر لو order.user_id == user.id”. دي هتكتبها في shop-lab أكتر من أي قاعدة تانية.

ReBAC (Relationship-Based Access Control)

زي GitHub: إنت تقدر تعدّل الـ repo لأنك عضو في team، والـ team ليه صلاحية write على الـ repo، والـ repo تبع الـ organization. القرار ماشي على سلسلة علاقات.

Google نشرت سنة 2019 ورقة عن نظام اسمه Zanzibar بيدير الصلاحيات دي لـ Drive و YouTube و Calendar، وبيرد على ملايين الأسئلة في الثانية. ومن ساعتها ظهرت أدوات مفتوحة المصدر مبنية على نفس الفكرة زي OpenFGA و SpiceDB.

المقارنة

النموذج بيسأل كويس لـ مثال
ACL اسمك في القايمة؟ مشاركة ملفات Google Docs
RBAC دورك إيه؟ أغلب التطبيقات لوحة أدمن shop-lab
ABAC الخصايص بتسمح؟ قواعد فيها شروط refund أقل من 5,000
ReBAC علاقتك بالحاجة إيه؟ منظمات وفرق ومشاركة متداخلة GitHub، Google Drive

في الحقيقة معظم الأنظمة بتخلط: RBAC للصورة الكبيرة، وقواعد ABAC (زي الملكية) فوقيه.

ابدأ بـ RBAC وقواعد ملكية بسيطة. وروح لـ ABAC لما القرار يحتاج شروط، ولـ ReBAC لما يحتاج سلسلة علاقات.

أسئلة الإنترفيو

فكّر في إجابتك الأول، وبعدين افتح السؤال.

01الفرق بين RBAC و ABAC؟

RBAC بيدّي الصلاحيات للأدوار والأدوار للمستخدمين، وده بسيط وكويس لأغلب التطبيقات. ABAC بيقرر بخصايص المستخدم والحاجة والعملية والظروف، زي "refund لو المبلغ أقل من 5000 ومن نفس الفرع". ولما RBAC يبدأ يحتاج أدوار لكل حالة (role explosion)، يبقى وقت ABAC. وغالباً الاتنين بيتخلطوا.

02إخفاء الزرار في الـ UI حماية؟

لأ. ده UX بس. أي حد يقدر يبعت الـ request بنفسه من Postman. الحماية الحقيقية لازم تبقى على السيرفر في كل request.

03اشرح Deny by Default و Least Privilege.

Deny by Default: أي حاجة مش مسموحة صراحة تبقى ممنوعة، فلو نسيت تحمي route يتقفل لوحده. Least Privilege: كل حد ياخد أقل صلاحية تكفيه، فلو حسابه اتسرق الضرر يبقى محدود.

04إيه هو ReBAC، وفين بتشوفه؟

صلاحيات مبنية على علاقات، حتى لو غير مباشرة: إنت في team، والـ team ليه write على repo، والـ repo في organization. زي GitHub و Google Drive. و Google عملت نظام Zanzibar للحكاية دي.

علّم عليه لما تقدر تجاوب أسئلة الإنترفيو من غير ما تبص.