مصفوفة التفويض — EduRegie
توثيق رسمي لمن يُسمح له برؤية وفعل ماذا، بما يتماشى مع الأدوار الواردة في docs/product-blauwdruk.md وكما هو مُطبَّق فعليًا في لوحة التحكم على الويب (تنقل قائم على الأدوار في components/DashboardNav.tsx، وتحققات من الأدوار من جانب الخادم لكل صفحة، وأمان مستوى الصف (RLS) لكل مدرسة في قاعدة البيانات).
| الدور | نظرة عامة | الإبلاغ عن المرض | الجدول الزمني والاستبدال | حالة الفريق | بلاغات الغياب | الإحصاءات | الموظفون | المستخدمون | الإعدادات |
|---|---|---|---|---|---|---|---|---|---|
| موظف | ✓ | ✓ (بلاغه الخاص) | — | — | — | — | — | — | — |
| مركز الاتصال/المشغّل | ✓ | — | — | — | — | — | — | — | — |
| منسق الجدول | ✓ | — | ✓ | — | ✓ | — | — | — | — |
| رئيس الفريق | ✓ | — | — | ✓ | ✓ | ✓ | — | — | — |
| الموارد البشرية/منسق الغياب | ✓ | — | — | — | ✓ | ✓ | ✓ | — | — |
| البديل | ✓ | — | — | — | — | — | — | — | — |
| مسؤول المدرسة | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
التطبيق (تقني، وليس إجرائيًا فقط)
- مستوى قاعدة البيانات (RLS): كل استعلام مقيّد من جانب الخادم بمدرسة المستخدم نفسه عبر
current_school_id()— لا يمكن لمستخدم أبدًا استرجاع بيانات مدرسة أخرى، بغض النظر عمّا تسمح به طبقة التطبيق (supabase/migrations/0002_auth_and_rls.sql). - مستوى التطبيق (التحقق من الدور لكل صفحة): تتحقق كل صفحة في لوحة التحكم بنفسها من دور المستخدم المسجّل الدخول (مثال:
app/dashboard/rooster/page.tsxيرفض الوصول لأي شخص باستثناءscheduler/admin)، وليس فقط بإخفاء عنصر التنقل. - إدارة الحسابات: تُنشأ الحسابات الجديدة فقط عبر دعوة من مسؤول المدرسة (
app/api/internal/gebruikers/uitnodigen/route.ts) — لا يوجد تسجيل ذاتي، وبالتالي لا يوجد تعيين أدوار غير مُتحكَّم به.
لم يُنفَّذ بعد
- أدوار دقيقة داخل المدرسة الواحدة (على سبيل المثال، اقتصار الموارد البشرية على موقع واحد ضمن مجموعة مدارس) — أُجِّل عمدًا إلى المرحلة 3 (المؤسسات/متعدد المواقع)، راجع
docs/mvp-roadmap.md.
أصبحت المصادقة الثنائية للموارد البشرية والمسؤول مُطبَّقة الآن فعليًا (
middleware.ts،/dashboard/beveiliging) — راجع ملحق الأمان.