التحكّم بالوصول القائم على الأدوار (RBAC)
التحكّم بالوصول القائم على الأدوار (RBAC)
تُخبرك المصادقة من المستخدم؛ ويقرّر التفويض ما يُسمح له بفعله. أشيع نموذج هو RBAC — التحكّم بالوصول القائم على الأدوار — حيث للمستخدمين أدوار (مدير، محرّر، مُشاهِد) وتتطلّب المسارات أدوارًا محدّدة. يطبّق NestJS هذا بأناقة بالحُرّاس والبيانات الوصفية والمُزخرِفات التي تعرفها أصلًا.
اللبنات
يجمع RBAC في NestJS ثلاثة أشياء قابلتها في المرحلة الثالثة:
- مُزخرِف مخصّص (
@Roles()) لإعلان الأدوار التي يحتاجها مسار. - بيانات وصفية يُرفِقها ذلك المُزخرِف عبر
SetMetadata. - حارس يقرأ البيانات الوصفية بـ
Reflectorويفحص أدوار المستخدم.
مُزخرِف Roles
حارس RolesGuard
يقرأ الحارس الأدوار المطلوبة ويقارنها بأدوار المستخدم المُصادَق (أرفقته استراتيجية JWT):
@Roles() على مستوى الدالّة تجاوز ما على مستوى المتحكّم. وهذه الطريقة القياسية المرنة لقراءة بيانات الأدوار.
الجمع معًا
احمِ مسارًا بكلا الحارسين: أولًا صادِق (JWT)، ثم فوّض (الأدوار). الترتيب مهمّ — يجب أن تعرف من المستخدم قبل فحص أدواره:
APP_GUARD ليُفحَص كل مسار. المسارات بلا @Roles() تُسمَح ببساطة، فتشترك في الحماية لكل مسار — ولا تنسى إضافة الحارس أبدًا.
RBAC مقابل تحكّم أدقّ
RBAC بسيط ويغطّي معظم الحاجات: "المديرون يستطيعون حذف المستخدمين". لكنه يتعثّر مع قواعد تعتمد على المورد المحدّد — "يستطيع المستخدم تعديل منشوره هو لا منشورات غيره". تلك مصادقة قائمة على السمة/الملكية، وتحتاج أكثر من فحص دور.
editor-of-post-42) فخّ. حين تعتمد الصلاحيات على المورد وعلاقة الفاعل به، انتقل إلى نهج قائم على السياسات — التالي.
الخلاصة
يُسنِد RBAC أدوارًا للمستخدمين وأدوارًا مطلوبة للمسارات. طبّقه بمُزخرِف @Roles() (بيانات وصفية)، وحارس RolesGuard يقرؤه عبر Reflector، وحارس JWT يعمل أولًا فيُعرَف المستخدم. سجّل الحارس عامًّا واشترك بالمسارات. يعالج RBAC قواعد مستوى الأدوار جيدًا؛ ولقواعد الملكية والمورد المحدّد تحتاج سياسات — درس التفويض الأخير.