DWPlatform lifecycle
دليل ميداني · الصلاحيات

مين يقدر يعمل إيه — القرار بيتاخد في مكان واحد، وفي كل طلب.

ستة مخططات بالمسارات بتغطي كل طريقة بيتاخد بيها قرار في DWPlatform: واحد بيدوس زرار، ومسؤول بيدّي صلاحية، وزميل بيغطي تفويض، ومهندس بيكسر الزجاج وقت عطل، وخدمة بتنادي خدمة تانية. كلهم بيعدّوا من نفس الفحص، لأن أول ما واحد فيهم ياخد طريق مختصر، الطريق المختصر ده هو اللي بيبقى نموذج الأمان الحقيقي.

آخر تحديث ٢٧ يوليو ٢٠٢٦ ٦ مخططات BPMN ٩٠ صلاحية · ٧ نطاقات
📚 لسه جديد على الموضوع؟ ابدأ بـكورس الصلاحيات الأول — هناك الحكاية والنطاقات السبعة بالأمثلة. الصفحة دي هي الفصل المتقدم: القواعد الحاكمة، وخريطة القرار كاملة بالمخططات، وكسر الزجاج، ونداءات الخدمات — للي عايز يفهم النظام من جوه أو بيراجعه.

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

دي مش أمنيات مكتوبة على ويكي. كل واحدة فيهم مفروضة بالكود، وكل واحدة موجودة لأن غيابها بيعمل عطل معروف ومحدد.

قاعدة ٠١

مفيش فحص أدوار في الكود

الأدوار مجرد حزم صلاحيات، مش أكتر. مفيش حاجة بتتفرّع على اسم دور. لو دوّرت على اسم دور بره وحدة تعريف الأدوار، المفروض متلاقيش حاجة.

قاعدة ٠٢

نقطة دخول واحدة

كل عملية محمية بتنادي نفس الدالة. الفحوصات المتناثرة في الكنترولرز هي اللي بتخلي نقطتين المفروض يتفقوا يبطّلوا يتفقوا من غير ما حد ياخد باله.

قاعدة ٠٣

السيرفر هو البوابة الوحيدة

الشاشة بتاخد قائمة الصلاحيات علشان تعرف ترسم إيه وبس. افترض إن العميل عدو: ممكن يتعدّل، وفي الآخر هيتعدّل.

قاعدة ٠٤

الأصل هو المنع

غياب التصريح = رفض. مفيش وراثة ضمنية — النطاق اللي المفروض يغطي المدير وموظفينه بيكتب الاتنين صراحةً.

قاعدة ٠٥

مفيش صلاحية من غير نطاق

مفيش حاجة اسمها salary.read. في بس salary.read على مجموعة ناس محددة. صلاحية من غير نطاق معناها صلاحية على كل الناس.

ليه القاعدة الخامسة هي اللي بتوجع. قائمة الصلاحيات سهلة تتفهم وسهلة تتغلط فيها. في نسخة قديمة، كان المسؤول فعلاً معاه payslip.read بنطاق ذاتي — ومع ذلك قائمة المرتبات كانت بترجّع كل الصفوف في المستأجر، لأن البوابة كانت تقدر تسأل «معاك الصلاحية دي ولا لأ؟» وبس. الـattribute ملهاش سجل، فمش قادرة تسأل «على مين؟». والسؤال ده لازم يتجاوب جوه الاستعلام نفسه، وعلشان كده كل قائمة وبحث وتقرير وتصدير بيركّب مُرشِّح النطاق جوه الـSQL بدل ما يفلتر الصفوف بعد ما يجيبها. الفلترة بعد الجلب لسه بتسرّب عدد الصفوف وإجمالي الصفحات — ودول غالبًا هما الجزء الحساس.

الشكل العام

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

المتصفح بيرسم اللي بيتقاله الموارد البشرية · سير العمل التخزين · البريد · المحادثة… authorize() scopeFilter() · visibleFields() svc:hr · svc:workflow الخدمات كمان كيانات المحرك جوه خدمة الهوية تصاريح · منع · تفويض كسر زجاج · فصل مهام · هيكل سجل لا يُعدَّل قاعدة البيانات أمان مستوى الصف هو السور الخارجي للمستأجر، والنطاق بيضيّق جوّاه بتسأل التوكن مفيهوش أي صلاحيات
اللي اتغيّر، في سطر واحد. توكن الدخول كان شايل الإجابة. دلوقتي شايل بس إنت مين و إنت في أنهي مستأجر — وده نزّله من ٤٥٩٣ حرف لـ٢٤٠٨. الصلاحيات بتتشاف لحظيًا، فسحب صلاحية بيسري في ثواني بدل ما تستنى توكن عمره ٢٤ ساعة يخلص.

١ · قرار واحد

ده هو النموذج كله. كل اللي تحت مجرد اختلافات عليه.

اقرا مسارات الرفض، مش المسار السعيد. المنع بيكسب المنح، يعني «المدير ده مينفعش يشوف الأجور وقت التقييم» محدش يقدر يلغيها بإنه «يساعد» ويضيف دور. وتواريخ الصلاحية بتتشيّك في كل طلب مش وقت الدخول، فالتصريح اللي بيخلص الساعة ١٢ بيقف الساعة ١٢، مش لما الشخص يخرج ويدخل تاني. والرفض نفسه بيتسجّل: تكرار الرفض هو أوضح إشارة إن فيه صلاحية متظبطة غلط أو إن حد بيجرّب الأبواب.

٢ · إدّي صلاحية

التوسّع محتاج اتنين

مش هتقدر تدّي لنفسك حاجة إنت أصلاً مش معاك. والرفض ده بيحصل قبل حتى فحص التعارض، وعلشان كده منح النفس بيرجّع 403 مش 409 — الاتنين رفض، والترتيب مقصود.

التعارضات بيانات مش ذاكرة

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

٣ · تغطية حد

تلات حاجات بيخلّوا التفويض آمن بدل ما يكون هوية تانية: عمره ما يزيد عن اللي عند صاحب التفويض (وبيتشيّك وقت الاستخدام، لأنه ممكن يكون فقدها بعد كده)، ولازم ينتهي، ومش متعدّي — المفوَّض له مش هيقدر يفوّض حد تاني. وكل إجراء مكتوب «فلان نيابة عن فلان» في السجل وفي مسار الاعتماد الظاهر. لو اتسجّل باسم صاحب التفويض لوحده، ده تزوير، مهما كانت الشاشة شكلها أظبط.

٤ · كسر الزجاج

المقايضة، بصراحة. النظام اللي مفيهوش باب طوارئ، الناس بتعمله باب بنفسها — عادةً حساب أدمن مشترك وباسووردـه في شات. فالباب مبني جوه، بس بصوت عالي: سبب مكتوب ولازم يكون حقيقي، وحد أقصى ٦٠ دقيقة، وتنبيه فوري لقناة الأمن، وكل إجراء اتعمل من خلاله متعلّم عليه للمراجعة. الهدف مش نمنع الطوارئ. الهدف إن الطوارئ تبقى مستحيل تتخبّى.

٥ · خدمة بتنادي خدمة

ده الرسم اللي جه من عطل حقيقي وصامت. الموارد البشرية كانت بتبعت تحديثات الهيكل لخدمة الهوية بتوكن موضوعه مش بيسمّي حد. فحص الصلاحيات عمل الصح ورفض — والعميل سجّل تحذير وكمّل. محصلش حاجة باينة. بس الهيكل هو اللي self وdirect_reports وreporting_chain وdepartment كلهم بيترجموا من خلاله، يعني هيكل بيتأخر عن بيانات التوظيف معناه صلاحيات بتتحسب بالساكت على تبعية الشهر اللي فات.

والحل مش استثناء لـ«المنادي الموثوق». ده تفويض ضمني، والاستثناء عمره ما بيتحدّد بنطاق ولا بيتسجّل. دلوقتي الخدمة كيان قايم بذاته: ليها تصاريح، في مستأجر باسمه، بيتقيّموا بنفس الكود بتاع البني آدم، وأفعالها بتتنسب لها هي في السجل — مش لشخص ماكانش موجود.

٦ · صلاحيات بتصيّن نفسها

صلاحية المدير بتتحسب من الهيكل وقت السؤال، مش متخزّنة كتصريح. يعني النقل مش محتاج مهمة تنضيف ولا بند في checklist الخروج: المدير القديم بيفقد الرؤية لأنه بقى مش المدير، مش لأن حد فاكر يسحب حاجة. الصلاحيات اللي بتتنسي هي بالظبط اللي كان لازم حد يفتكرها.

الشاشات الحقيقية — فين كل ده بيتعمل

كل اللي فوق بيتدار من قسم «الوصول» في تطبيق الهوية. دي لقطات حقيقية من النظام — والجولة العملية ضغطة‑ضغطة في دليل ضبط الأدوار:

مربع إضافة صلاحية وقايمة النطاق مفتوحة بالسبع نطاقات
إضافة صلاحية لحزمة: الفعل من الدليل فوق، والنطاق من السبعة تحت — «مفيش صلاحية من غير نطاق» مش شعار، ده شكل الفورم نفسه.
صفحة صلاحياتي: كل صلاحية فعالة ونطاقها ومصدرها
«صلاحياتي»: مرآة الحقيقة — كل صلاحية فعّالة، ونطاقها، وجاية منين (حزمة/منحة/تفويض). أول أداة تشخيص لأي شكوى «مش شايف».

النطاقات السبعة

النطاقات مش بتتداخل. لو الحزمة المفروض تغطي الشخص و موظفينه، بتكتب الاتنين — الوضوح أحسن من الشطارة، وكل قاعدة وراثة ضمنية هي قاعدة حد هيفهمها غلط.

النطاقبيغطيبيتحسب من
selfسجل الشخص نفسه بسالشخص المربوط بالحساب
direct_reportsاللي تابعين ليه مباشرةالهيكل، لحظيًا
reporting_chainكل اللي تحته لأي عمقالهيكل، لحظيًا
departmentإدارة وكل الإدارات اللي تحتهابادئة مسار الشجرة
legal_entityشركة واحدة جوه المستأجرالشركة في بيانات التوظيف
locationفرع أو موقع واحدالفرع في بيانات التوظيف
allالمستأجر كله — ولا حاجة أوسعأمان مستوى الصف لسه هو السور الخارجي

مقارنة بالمنصات اللي بنتقاس عليها

كشف حساب صادق أنفع من كشف حساب واثق. المقارنة تحت مع نماذج الصلاحيات في Workday وSAP SuccessFactors (الموارد البشرية)، وMicrosoft 365 وGoogle Workspace (التعاون)، وServiceNow (التشغيل متعدد المستأجرين). واللي إحنا ناقصين فيه، مكتوب إننا ناقصين فيه.

الممارسةالأفضل بيعملوا إيهDWPlatform
فصل الدور عن الصلاحيةالأدوار حزم؛ مفيش حاجة بتقيّم اسم دور مطابق. ٩٠ صلاحية، ١٧ حزمة، وصفر تفرّع على اسم دور في الكود
الفئة المستهدفةSuccessFactors بيربط دور الصلاحية بفئة مستهدفة مطابق. ٧ نطاقات، بتتحسب من الهيكل، ومركّبة جوه الاستعلام مش مطبّقة بعده
الصلاحية بالعلاقةبتتحسب من الهيكل وقت التقييم مطابق. عمرها ما بتتخزّن كتصريح، فالنقل مش محتاج تنضيف
أمان مستوى الحقلالوصول للسجل مش معناه الوصول للحقل مطابق وزيادة شوية. الأجر ممكن يتحوّل لشريحة بدل ما يتخفي، فالمدير يخطط من غير ما يقرا مرتبات. والمخفي بيبقى غير موجود أو معلّم صراحةً — عمره ما يكون قيمة مزيفة
فصل المهامأزواج التعارض مرفوضة وقت المنح ووقت الاستخدام مطابق، مع تحفّظ واحد. مزروعة كبيانات، ومرفوضة وقت المنح، وبتتفحص تاني في كل طلب صلاحية — وده اللي بيمسك التعارض اللي ظهر بعد المنح: تعديل دور، أو تفويض بيدّي النص التاني، أو تصريح بتاريخ مستقبلي دخل حيّز التنفيذ، أو زوج جديد اتضاف للجدول بأثر رجعي. والرفض بيسمّي الزوج مش بيرجّع ٤٠٣ عام، وبيتقيّم فوق كسر الزجاج: الطوارئ علشان معتمِد مش موجود، مش علشان تكمّل نصّي مهمة مفصولة. والموافقة على النفس فاضلة مستحيلة بالكود. التحفّظ: الزوج المحدود بنفس السجل مينفعش يتحكم فيه غير لما الطلب يسمّي السجل، فنقطة كتابة بتتحقق من الصلاحية بس من غير ما تقول بتغيّر أنهي سجل، مش بياخد الفحص ده
التفويضمؤقت، غير متعدّي، ومسجّل «نيابةً عن» مطابق. والجزء بيتشيّك وقت الاستخدام مش وقت الإنشاء بس
هوية الخدماتحسابات خدمة في Google Cloud، وصلاحيات تطبيق في Microsoft Graph مطابق. الخدمات كيانات ليها تصاريح محدودة بالمستأجر، بيتقيّموا بنفس المحرك، وبتتسجّل باسمها
السحب أثناء الجلسةإجابات قصيرة العمر بتتحدّث عند التغيير مطابق. التوكن مفيهوش صلاحيات؛ ورقم الإصدار بيجبر التحديث في ثواني
تسجيل الرفضالرفض بيتسجّل مش النجاح بس مطابق. سجل لا يُعدَّل، مفروض بصلاحية قاعدة البيانات مش بالاتفاق
كسر الزجاجبسبب، ومؤقت، وبتنبيه، ومتعلّم عليه مطابق. ٦٠ دقيقة، وسبب حقيقي مطلوب
إعادة اعتماد الصلاحياتحملات مراجعة دورية — المديرين بيراجعوا مين معاه إيه ناقص. التصاريح ظاهرة وبتتسحب، بس مفيش حاجة بتجدول مراجعة. وتراكم الصلاحيات هو العطل الطبيعي لنظام مرن بالشكل ده
محاكاة السياسة«اشرح لي القرار ده» و«لو عملت كده هيحصل إيه» جزئي. ينفع تشيّك قرار واحد وتحسب نطاق، بس مفيش محاكاة لتصريح قبل ما يتمنح
مفاتيح تشفير العميل / موقع البياناتمفاتيح لكل مستأجر، وتثبيت جغرافي ناقص. مش مطلوب في الحجم الحالي، بس ده أول سؤال بيتسأل في مشتريات المؤسسات
الصلاحية بخصائص السجلشروط على حالة السجل، مش العلاقة بس جزئي. التصريح شايل قيد، واللي مش بيتقري منه بيضيّق لصفر مش بيوسّع — بس مش لغة شروط عامة
الخلاصة بصراحة. في آليات اتخاذ القرار نفسه، إحنا في مستوى الأنظمة اللي بنتقاس عليها، وقدّامهم في حاجتين تحديدًا مقارنة بأغلب منتجات الموارد البشرية الإقليمية: الأجر بيتحوّل لشريحة بدل ما يتخفي، ومُرشِّح النطاق مركّب جوه الاستعلام فإجماليات القوائم مبتسربش. الفجوات الحقيقية في الحوكمة مش في التطبيق — مفيش حاجة بتجدول إعادة اعتماد، ومفيش طريقة تسأل بيها تصريح مقترح هيغيّر إيه قبل ما تمنحه. دول أهم حاجتين يتبنوا بعد كده، ومحدش منهم صعب؛ هما بس ماكانوش هدف الشغل ده.

حاجات اخترنا عن قصد إننا مانعملهاش

مفيش علامة «خدمة موثوقة»

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

مفيش إجابة قديمة وقت العطل

لما المحرك مايبقاش موصول، المنادي بيبقى معاه ولا حاجة مش آخر صلاحيات عرفها. يعني العطل بيرفض الشغل مش بيفتحه. لو خدمنا نسخة مخزّنة وقت العطل، كنا فتحنا تاني نفس ثغرة السحب اللي التصميم ده موجود علشانها.

مفيش إعادة تسمية للصلاحيات

الكتالوج بيتزاد عليه، مبيتغيّرش. إعادة التسمية مش باينة وقت الترجمة وبتحوّل التصريح بالساكت لحاجة ملهاش لازمة — واللي بيوصل بعد شهور على إنه «الشخص ده فقد صلاحيته من غير سبب».

مفيش أسماء أدوار في التوجيه

لما اسم الدور لسه بيتستخدم — طابور الرئيس التنفيذي بيوصل لسكرتيره، أو خبر موجَّه لمكتب — فهو بيسمّي الوجهة، مش اللي مسموح ليه يعمله. العضوية والسلطة بيتشافوا كل واحدة لوحدها وعن قصد.

خلاصة الفصل المتقدم. قرار واحد بيتاخد في مكان واحد وبترتيب ثابت: المنع أولًا، فتضارب المهام، فكسر الزجاج المسجّل، فالمنح بنطاقاتها — والأصل هو الرفض. البشر والخدمات والتفويضات كلهم بيعدّوا من نفس البوابة، وأي تغيير في الهيكل بيصيّن الصلاحيات لوحده. لو عايز التطبيق العملي ارجع لـضبط الأدوار، ولو عايز الأساس ارجع لـالكورس.