مستخدم سجل دخوله بنجاح لكن ده مش معناه إنه يقدر يعدل أي مقال أو يفتح أي فاتورة في الموقع هنا بيظهر الفرق بين التأكد من هوية الشخص وبين السماح له بتنفيذ إجراء معين
ال 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 صعب تخمينه لازم تراجع هل الحساب يملك الملف أو مسموح له يشوفه رابط طويل مش بديل عن الصلاحية وملف الصورة أو المرفق الخاص محتاج نفس حماية الصفحة
جرب الصلاحيات كأنك أكتر من مستخدم
اختبر زائر وعضو نشط وصاحب المحتوى وعضو تاني وحساب موقوف متكتفيش بتجربة المدير لأنه غالبا بيقدر يعمل حاجات أكتر وهتفوته أخطاء المنع
مثلا افتح طلب تعديل مقال بحساب صاحبه ثم بنفس البيانات بحساب آخر النتيجة المفروض تختلف حتى لو الرابط والمحتوى المرسل متطابقين
ابدأ بالمنع ثم اسمح بالحالات المطلوبة
اكتب الحالات المسموحة بشكل واضح وأي حالة مش متغطية تتمنع كده إضافة دور جديد أو مورد جديد مش هتديله صلاحيات بالصدفة راجع القاعدة مع تغير حالة الحساب أو ملكية المحتوى