RBAC في الممارسة: تنفيذ تفويض آمن لتطبيقك
دليل كامل للتحكم في الوصول المستند للأدوار (RBAC): التحكم في تصميم الأذونات وإدارة الأدوار والتفويض الآمن مع تنفيذ عملي لنظام إدارة المحتوى (CMS).
هل تعاني من تنفيذ نظام تفويض آمن وقابل للتوسع لتطبيقك؟ التحكم في الوصول المستند للأدوار (RBAC) هو المعيار الصناعي لإدارة أذونات المستخدمين، لكن تنفيذه بشكل صحيح يمكن أن يكون تحديًا. سيعرض لك هذا الدليل كيفية بناء نظام RBAC قوي باستخدام مثال حقيقي لنظام إدارة المحتوى (CMS).
باتباع هذا الدليل، ستتعلم:
- ✨ كيفية تصميم وتنفيذ أذونات دقيقة تمنحك تحكمًا دقيقًا
- 🔒 أفضل الممارسات لتنظيم الأذونات في أدوار ذات معنى
- 👤 تقنيات للتعامل مع ملكية الموارد بفعالية
- 🚀 طرق لجعل نظام التفويض الخاص بك قابلاً للتوسع والصيانة
- 💡 تنفيذ عملي باستخدام مثال حقيقي لنظام إدارة المحتوى (CMS)
الشفرة المصدرية الكاملة لهذا الدليل متاحة على GitHub.
فهم أساسيات RBAC
التحكم في الوصول المستند للأدوار ليس مجرد تعيين أذونات للمستخدمين. إنها عن خلق نهج منظم للتفويض يوازن بين الأمان وسهولة الصيانة.
يمكنك معرفة المزيد عن ما هو RBAC في Auth Wiki.
ها هي المبادئ الرئيسية التي سنتبعها في تنفيذنا:
تصميم أذونات دقيقة
الأذونات الدقيقة تمنحك تحكمًا دقيقًا فيما يمكن للمستخدمين فعله في نظامك. بدلاً من مستويات الوصول الواسعة مثل "admin" أو "user"، نقوم بتحديد الإجراءات المحددة التي يمكن للمستخدمين القيام بها على الموارد. على سبيل المثال:
read:articles
- عرض أي مقال في النظامcreate:articles
- إنشاء مقالات جديدةupdate:articles
- تعديل المقالات القائمةpublish:articles
- تغيير حالة نشر المقالات
ملكية الموارد والتحكم في الوصول
ملكية الموارد هي مفهوم أساسي في تصميم التفويض لنظام إدارة المحتوى (CMS) لدينا. بينما يحدد RBAC ما يمكن للأدوار المختلفة القيام به، تضيف الملكية بُعدًا شخصيًا إلى التحكم في الوصول:
- الكتّاب لديهم تلقائيًا حق الوصول إلى المقالات التي أنشأوها
- هذا النموذج الطبيعي لل ملكية يعني أن الكتّاب يمكنهم دائمًا عرض وتحرير محتواهم الخاص
- النظام يتحقق من الأذونات الخاصة بالأدوار أو الملكية عند معالجة عمليات المقالات
- على سبيل المثال، حتى بدون إذن
update:articles
، يمكن للكاتب تعديل مقالاته الخاصة - هذا التصميم يقلل من الحاجة إلى أذونات أدوار إضافية مع الحفاظ على الأمان
هذا النهج ذو الطبقتين (الأدوار + الملكية) يخلق نظامًا أكثر بديهية وأمانًا. الناشرين والمدراء يمكنهم أيضًا إدارة كل المحتوى من خلال أذونات الأدوار الخاصة بهم، بينما يحتفظ الكتّاب بالتحكم في أعمالهم الخاصة.
تصميم واجهة برمجة تطبيقات آمنة
لنبدأ بتصميم الوظيفة الأساسية لنظام إدارة المحتوى (CMS) الخاص بنا من خلال نقاط النهاية لواجهة برمجة التطبيقات:
تنفيذ التحكم في الوصول لواجهة برمجة تطبيقاتك
بالنسبة لكل نقطة نهاية، نحتاج إلى مراعاة جانبين من التحكم في الوصول:
- ملكية الموارد - هل يملك المستخدم هذه الموارد؟
- أذونات الأدوار - هل تسمح دور المستخدم بهذه العملية؟
إليك كيفية معالجة الوصول لكل نقطة نهاية:
نقطة النهاية | منطق التحكم في الوصول |
---|---|
GET /api/articles | - أي شخص لديه إذن list:articles ، أو الكتّاب يمكنهم رؤية مقالاتهم الخاصة |
GET /api/articles/:id | - أي شخص لديه إذن read:articles ، أو كاتب المقال |
POST /api/articles | - أي شخص لديه إذن create:articles |
PATCH /api/articles/:id | - أي شخص لديه إذن update:articles ، أو كاتب المقال |
DELETE /api/articles/:id | - أي شخص لديه إذن delete:articles ، أو كاتب المقال |
PATCH /api/articles/:id/published | - فقط المستخدمون لديهم إذن publish:articles |
إنشاء نظام أذونات يمكن أن يتوسع
بناءً على متطلبات الوصول لواجهة برمجة التطبيقات، يمكننا تعريف هذه الأذونات:
الإذن | الوصف |
---|---|
list:articles | عرض قائمة بجميع ا لمقالات في النظام |
read:articles | قراءة محتوى أي مقال |
create:articles | إنشاء مقالات جديدة |
update:articles | تعديل أي مقال |
delete:articles | حذف أي مقال |
publish:articles | تغيير حالة النشر |
لاحظ أن هذه الأذونات مطلوبة فقط عند الوصول إلى موارد لا تملكها. يمكن لأصحاب المقالات تلقائيًا:
- عرض مقالاتهم الخاصة (لا يحتاجون إلى
read:articles
) - تحرير مقالاتهم الخاصة (لا يحتاجون إلى
update:articles
) - حذف مقالاتهم الخاصة (لا يحتاجون إلى
delete:articles
)
بناء الأدوار الفعالة
الآن بعد أن حددنا واجهة برمجة التطبيقات والأذونات، يمكننا إنشاء أدوار تجمع بين هذه الأذونات بشكل منطقي:
الإذن/الدور | 👑 مدير | 📝 ناشر | ✍️ كاتب |
---|---|---|---|
الوصف | وصول كامل للنظام لإدارة المحتوى بالكامل | يمكنه عرض جميع المقالات والتحكم في حالة النشر | يمكنه إنشاء مقالات جديدة في النظام |
list:articles | ✅ | ✅ | ❌ |
read:articles | ✅ | ✅ | ❌ |
create:articles | ✅ | ❌ | ✅ |
update:articles | ✅ | ❌ | ❌ |
delete:articles | ✅ | ❌ | ❌ |
publish:articles | ✅ | ✅ | ❌ |
ملاحظة: الكتّاب لديهم تلقائيًا أذونات للقراءة والتحديث والحذف لمقالاتهم الخاصة، بغض النظر عن أذونات الأدوار.
كل دور مصمم بمسؤوليات محددة في الاعتبار:
- المدير: لديه التحكم الكامل في نظام إدارة المحتوى (CMS)، بما في ذلك جميع عمليات المقالات
- الناشر: يركز على مراجعة المحتوى وإدارة النشر
- الكاتب: متخصص في إنشاء المحتوى
هذا التصميم الدور يخلق فصلًا واضحًا للمسؤوليات:
- الكتّاب يركزون على إنشاء المحتوى
- الناشرون يديرون جودة المحتوى ورؤيته
- المديرون يحافظون على التحكم في النظام بشكل عام
ضبط RBAC في Logto
قبل البدء، تحتاج إلى إنشاء حساب في Logto Cloud، أو يمكنك أيضًا استخدام نسخة Logto ذات الاستضافة الذاتية باستخدام الإصدار مفتوح المصدر من Logto.
لكن في هذا الدليل، سنستخدم Logto Cloud للبساطة.
إعداد التطبيق الخاص بك
- انتقل إلى "التطبيقات" في وحدة التحكم Logto لإنشاء تطبيق react جديد
- اسم التطبيق: نظام إدارة المحتوى
- نوع التطبيق: تطبيق ويب تقليدي
- عناوين إعادة التوجيه: http://localhost:5173/callback
تكوين موارد واجهة برمجة التطبيقات والأذونات
- انتقل إلى "موارد واجهة برمجة التطبيقات" في وحدة التحكم Logto لإنشاء مورد واجهة برمجة تطبيقات جديد
- اسم واجهة برمجة التطبيقات: واجهة برمجة التطبيقات CMS
- معرف واجهة برمجة التطبيقات: https://api.cms.com
- إضافة الأذونات إلى مورد واجهة برمجة التطبيقات
list:articles
read:articles
create:articles
update:articles
publish:articles
delete:articles
إنشاء الأدوار
انتقل إلى الأدوار في وحدة التحكم Logto لإنشاء الأدوار التالية لنظام إدارة المحتوى
- المدير
- مع جميع الأذونات
- الناشر
- مع
read:articles
,list:articles
,publish:articles
- مع
- الكاتب
- مع
create:articles
- مع