Skip to Content

واجهة برمجة بوابة ولي الأمر

تُتيح بوابة ولي الأمر الإلكترونية (WP-PWP-BE) أربع نقاط نهاية للقراءة فقط تعرض تقدّم الطفل لوليّ أمره المرتبط. تشترك النقاط الأربع في بوابة الصلاحية ذاتها وفي منهجية الحزامَين المانعة للتسرّب.

بوابة الصلاحية

VIEW_OWN_CHILDREN | VIEW_PARENT_REPORTS | RUN_BACKOFFICE

يملك دور ولي الأمر كلًا من VIEW_OWN_CHILDREN وVIEW_PARENT_REPORTS. أي رمز خاص بمعلم أو طالب أو مدير مدرسة لا يملك أيًّا منهما ويتلقّى 403. RUN_BACKOFFICE محجوز لوصول المسؤول الخارق لخدمة الدعم الفني.

الصلاحية وحدها غير كافية. كل مسار يحمل :childId يتحقّق إضافةً من أن ولي الأمر المُستدعي مرتبط بذلك الطفل تحديدًا (انظر إغلاق IDOR أدناه).

إغلاق IDOR

تُشتَق هوية ولي الأمر من ctx.userId (الجلسة الموثَّقة). لا يوجد مقطع :parentId في أي مسار، مما يجعل طلب أطفال ولي أمر آخر بتغيير معرّف في الرابط مستحيلًا هيكليًا.

بالنسبة لمسارات :childId الثلاثة، يحلّ المعالج StudentProfile الخاص بالطفل ضمن منظمة المُستدعي ثم يستدعي canReachStudent(..., { allowParent: true }) مقابل وصلة ParentStudent:

النتيجةحالة HTTPمتى
الطفل ليس في منظمة المُستدعي (أو غير موجود)404عدم الإفصاح عن الوجود (عبر المنظمات)
الطفل في المنظمة لكن غير مرتبط بهذا الوليّ403داخل المنظمة لكن غير مرتبط (FU-15)
الطفل مرتبط200المتابعة بالاستجابة

التمييز بين 404 و403 مقصود: إعادة 403 لطفل عابر للمنظمة كان سيؤكّد وجود الطفل في النظام.

منهجية الحزامَين المانعة للتسرّب

تمرّ كل استجابة عبر طبقتَين من السلامة مستقلتَين:

  1. قائمة الحقول المسموح بها عبر DTO المُكتَّب (parent-portal.schemas.ts): يحتوي مخطّط الاستجابة على الحقول الآمنة لولي الأمر فحسب. درجات θ ورموز SkillStatus ورموز الملفات والمعرّفات الداخلية وأرقام المحكات لا يمكن تسرّبها لأنها غير مُعلَنة في المخطّط أصلًا.
  2. applyParentStricterFilter (حزام FR-LANG-6 الأصلي من modules/language-safety): يعمل على كل سلسلة نصية مُتسلسَلة في الاستجابة. يحجب أي معرّف داخلي أو درجة رقمية أو تسمية سريرية قد تتسرّب عبر حقل نصي مسموح به.

كلتا الطبقتَين ضروريتان. لا تكفي أيّ منهما وحدها.

نقاط النهاية

قائمة الأطفال

GET /api/parent/children

تُعيد قائمة الأطفال المرتبطين بولي الأمر الموثَّق عبر ParentStudent. يحتوي كل مدخل على الاسم الأول للطفل ومستوى الصف واسم المدرسة وطابع آخر نشاط. لا تظهر معرّفات الطلاب أو الصفوف أو قيم الدرجات.

مصفوفة فارغة استجابة صالحة حين لا يكون لولي الأمر أطفال مرتبطون بعد.

تاريخ التشخيص

GET /api/parent/children/{childId}/diagnostics

تُعيد تاريخ التشخيص المكتمل للطفل المحدد. يحمل كل مدخل تسمية حالة فحسب (وصف فئوي بالعربية)؛ لا تُدرَج أي قيمة θ خام أو نسبة مئوية أو رموز SkillStatus.

النمو عبر الزمن

GET /api/parent/children/{childId}/growth

تُعيد مسار حالة المجال الكبير موضِحةً كيف تغيّرت حالة الطفل في كل منطقة نمو عبر نوافذ التقييم. القيم تسميات فئوية بالعربية فحسب. لا تظهر أرقام على أي مستوى.

التوصيات المنزلية

GET /api/parent/children/{childId}/recommendations?window=BOY

تُعيد ما يصل إلى خمسة اقتراحات للنمو في المنزل مستمَدّة من السرد المُولَّد مسبقًا لولي الأمر. تأتي الاقتراحات من مكتبة قوالب ملف SPOT ولا تُولَّد في وقت التشغيل بواسطة نموذج لغوي (قاعدة V-5 عدم إدراج النماذج اللغوية في سير القياس).

يحدد معامل الاستعلام window (الافتراضي BOY) نافذة التقييم.

حمولة إيقاف GL-005

إن لم يكن للطفل تعيين ملف نشط (مثلًا التشخيص لا يزال جاريًا)، تُعيد نقطة النهاية HTTP 200 مع حمولة إيقاف GL-005 الآمنة بدلًا من اختراع اقتراحات. حمولة الإيقاف رسالة عربية دافئة قصيرة تُفسّر الحاجة إلى مزيد من البيانات. لا تلجأ أبدًا إلى بيان عام.

السلوك المغلق عند الفشل

تُعيد النقاط الأربع 503 إن كانت قواعد سلامة اللغة غير متاحة. يرفض الخادم إرسال استجابة دون التأكد من قدرة مرشّح أولياء الأمور الأكثر صرامة على العمل. هذا هو الموقف ذاته الذي تتبعه نقطة نهاية ملف PDF لولي الأمر (WP-09-BE).

لا تُخزَّن أجسام الاستجابة الخام من هذه النقاط ولا تُسجَّل في سياق مرئي لأدوار غير ولي الأمر. تضمن DTOs المُكتَّبة عدم وصول أي معرّفات داخلية إلى الشبكة، غير أن تسجيل أجسام الاستجابة الكاملة من جانب الخادم قد يُظهر اسم الطفل أو المدرسة لمطالعي السجلات.

ذو صلة