يحصل المدير المباشر على نسخة محصورة من نفس مساحة العمل التي يراها مسؤول الموارد البشرية: لوحات التحكم نفسها، والصفحات نفسها، لكن البيانات تقتصر على شجرة تقاريره فقط. هذا فرق جوهري يميّز المنصة عن أنظمة كثيرة تُعطي المديرين رؤية شاملة لا تتناسب مع موقعهم.
القاعدة الأمنية باختصار
عندما يكون نطاق بيانات دور المستخدم خط الإدارة التابع لي (كما في دور «مدير مباشر» الجاهز)، يحسب الخادم تلقائيًا "نطاق فريقه":
- التقارير المباشرة (المستوى الأول من
Person.managerId). - التقارير غير المباشرة (المستوى الثاني وما بعده، حتى المستوى السادس عمقًا).
- المدير نفسه ضمن النطاق.
تُطبَّق هذه القاعدة على كل نقطة نهاية API ذات صلة بالنمو والتطوير: تعيين التقييمات، تحرير خطط النمو، البحث عن أدوار مطابقة، تحليل الفجوات، التوصيات. أي محاولة لقراءة أو تعديل موظف خارج النطاق تُرجِع 403 برسالة عربية وإنجليزية واضحة.
ما يراه المدير المباشر مقارنةً بمسؤول الموارد البشرية
| السطح | مسؤول الموارد البشرية | المدير المباشر |
|---|---|---|
الصفحة الرئيسية /app | مساحة العمل بالكامل | (نفس التخطيط) |
/app/grow — أعداد خطط النمو | مساحة العمل بالكامل | فريقه فقط، مع ملصقات "(فريقك)" |
/app/grow/my-team | تقاريره المباشرة + رابط "عرض كامل المساحة" | تقاريره المباشرة فقط |
/app/develop — تقييمات معلّقة، مكتملة، حسب النوع | مساحة العمل بالكامل | فريقه فقط |
/app/people | كل الموظفين والمرشحين | شجرته الإدارية فقط |
/app/grow/succession | مرشحون لكل دور حرج، مساحة كاملة | المرشحون من شجرته فقط |
/app/grow/plans/[personId] وإجابات التقييم ومراجعة دراسة الحالة | أي شخص | من في شجرته فقط (تظهر صفحة «غير موجود» لغيرهم) |
/app/data-editor — ورقة الأشخاص | كل الأشخاص | شجرته فقط وللقراءة فقط (دور «مدير مباشر» لا يملك الحفظ هنا؛ والدور المخصّص المقيّد بالتسلسل الإداري الذي يملك الحفظ يُرفض حفظه لأي شخص خارج شجرته) |
/app/settings/* | متاحة | غير ظاهرة في القائمة الجانبية |
صفحة "فريقي"
في القائمة الجانبية تحت "النمو"، يظهر رابط "فريقي" لمسؤول الموارد البشرية والمدير المباشر معًا. الصفحة /app/grow/my-team تعرض لقطة سريعة لتقاريره المباشرة (المستوى الأول) في شكل بطاقات تحتوي:
- اسم الموظف ودوره الحالي.
- نسبة المطابقة لدوره المستهدف (إن وُجد) مع حلقة تقدّم ملوّنة.
- شريحة جاهزية التعاقب (جاهز الآن / ناشئ / فجوة / غير جاهز).
- حالة خطة النمو (
نشطة n/m محطةأولا توجد خطة). - أبرز ثلاث جدارات بمستوياتها.
النقر على البطاقة يفتح تفاصيل الموظف الكاملة في /app/people/[personId].
الفرق بين "فريقي" ولوحة /people المُصفّاة
كلاهما محصور بنطاق المدير، لكن:
- فريقي — تقارير مستوى أول فقط، تركيز على الجاهزية والتطوير، عرض البطاقات المُلخَّصة.
- /people — شجرة إدارية كاملة (مستويات ١-٦)، عرض جدولي قابل للفرز والبحث.
الأولى للتركيز اليومي، الثانية للمراجعة الشاملة.
ماذا لو لم تُحدَّد علاقات الإدارة؟
إذا لم يحدد مسؤول الموارد البشرية managerId لأي موظف، يكون نطاق المدير المباشر فارغًا (يحتوي فقط على نفسه). ستبدو لوحاته خالية. الحل:
- اذهب إلى
/app/people. - افتح ملف الموظف.
- عيّن المدير في حقل "المدير المباشر".
كل موظف يُحدَّث managerId له يدخل تلقائيًا نطاق مديره.
استثناءات — متى لا تنطبق القاعدة
- بوابة الموظف
/me— كل عضو، مدير أو غيره، يرى ملفه الشخصي بكامل تفاصيله بصرف النظر عن النطاق. - مكتبة قوالب التقييمات — مفتوحة للقراءة لكل من المدير والـ HR، لأنها بيانات إعدادات لا بيانات أشخاص.
/app/hire— لا يخضع لتحديد نطاق المدير في الإصدار الحالي؛ تخطيط حصر فرص التوظيف بمدير مُعيَّن مؤجَّل إلى v0.6.
كيف يُختبَر هذا؟
خذ مديراً لديه شجرة تبعية من ثلاثة مستويات، مثلاً:
هدى (مديرة)
├── منال (تقرير مباشر)
│ └── محمد (تقرير غير مباشر — المستوى الثاني)
└── عبدالعزيز (تقرير مباشر)
سجّل دخول كهدى لرؤية ثلاثة موظفين في النطاق (نفسها + ثلاثة + واحد على المستوى الثاني = أربعة). جرّب فتح /app/grow/my-team لرؤية تقاريرها المباشرة فقط (منال وعبدالعزيز). جرّب فتح /app/people لرؤية الشجرة الكاملة بشأنها.