مستخدم سجل دخوله بنجاح لكن ده مش معناه إنه يقدر يعدل أي مقال أو يفتح أي فاتورة في الموقع هنا بيظهر الفرق بين التأكد من هوية الشخص وبين السماح له بتنفيذ إجراء معين

ال Authentication بتجاوب على سؤال أنت مين

المقصود التحقق من الهوية زي تسجيل الدخول بكلمة مرور أو وسيلة تانية وبعد النجاح التطبيق بيقدر يربط الطلبات بحساب معروف من خلال جلسة أو وسيلة مناسبة

استخدم أدوات تسجيل الدخول الموثوقة في إطار العمل بدل بناء تخزين كلمات المرور والجلسات من البداية علشان المثال التعليمي مش بديل عن نظام دخول كامل

ال Authorization بتجاوب على سؤال مسموح لك تعمل إيه

بعد معرفة الحساب بنراجع الإجراء المطلوب والمورد اللي هيحصل عليه الإجراء عضو ممكن يعدل مقاله هو لكن ميعدلش مقال عضو تاني ومحرر ممكن تكون له صلاحية أوسع حسب قواعد الموقع

مثال بسيط على قرار الصلاحية

الكود التالي بيوضح قرار التعديل فقط ويفترض إن بيانات العضو والمقال جاية من مصادر موثوقة على الخادم مش من حقول بعتها المستخدم

function canEditArticle(member, article) {
  if (!member || !member.active) return false;
  return member.role === "editor" || member.id === article.authorId;
}

const article = { authorId: "member-a" };
console.log(canEditArticle(null, article));
console.log(canEditArticle({ id: "member-a", active: true, role: "member" }, article));
console.log(canEditArticle({ id: "member-b", active: true, role: "member" }, article));
console.log(canEditArticle({ id: "member-c", active: false, role: "editor" }, article));
false
true
false
false

مكان الفحص أهم من شكل الزر

إخفاء زر التعديل بيحسن الواجهة لكنه مش حماية كفاية لأن الشخص ممكن يرسل الطلب من غير الزر الفحص الحقيقي لازم يحصل على الخادم قبل قراءة البيانات الخاصة أو تغييرها

كمان متثقش في authorId أو role جايين من الطلب حدد الحساب من الجلسة واقرأ ملكية المقال من البيانات المحفوظة واستخدم نفس قواعد الصلاحيات في كل مسار لنفس العملية

معرفة الرابط مش معناها السماح بالدخول

حتى لو استخدمت UUID صعب تخمينه لازم تراجع هل الحساب يملك الملف أو مسموح له يشوفه رابط طويل مش بديل عن الصلاحية وملف الصورة أو المرفق الخاص محتاج نفس حماية الصفحة

جرب الصلاحيات كأنك أكتر من مستخدم

اختبر زائر وعضو نشط وصاحب المحتوى وعضو تاني وحساب موقوف متكتفيش بتجربة المدير لأنه غالبا بيقدر يعمل حاجات أكتر وهتفوته أخطاء المنع

مثلا افتح طلب تعديل مقال بحساب صاحبه ثم بنفس البيانات بحساب آخر النتيجة المفروض تختلف حتى لو الرابط والمحتوى المرسل متطابقين

ابدأ بالمنع ثم اسمح بالحالات المطلوبة

اكتب الحالات المسموحة بشكل واضح وأي حالة مش متغطية تتمنع كده إضافة دور جديد أو مورد جديد مش هتديله صلاحيات بالصدفة راجع القاعدة مع تغير حالة الحساب أو ملكية المحتوى

مصادر للتوسع