تخيل المنصة عمارة. في شركة بتديرها كلها (مشغّل المنصة)، وفي جهات ساكنة فيها كل واحدة بشقتها وبراندها (العملاء)، وجوّا كل شقة في ناس بأدوار مختلفة: مسؤول بيدير، وموظفين بيشتغلوا، ومكاتب ليها شغل مخصوص. الصفحة دي بتعرّفك على السكان كلهم — طبقة الـ SaaS (اللي بيديروا العمارة) وطبقة الجهة (اللي عايشين جواها) — عشان لما تقابل اسم دور في أي دليل تعرف هو مين فورًا.
| صاحب المصلحة | هو مين | بيعمل إيه |
|---|---|---|
| مشغّل المنصة / Super‑Admin | الشركة اللي شغّالة DWPlatform | بيشغّل لوحة المنصة: بيعمل الجهات، وبيحدد الباقات، وبيجهّز قواعد البيانات، وبيدير الكتالوج، وبيتابع الاستخدام والفوترة. وهو تلقائيًا Admin في كل خدمة. |
| الجهة (المؤسسة) | جهة عميلة مشتركة في المنصة | هي حدود الفوترة والعزل — بتملك براندها ومستخدميها وبياناتها وباقتها والـ modules المتاحة ليها. |
| مالك الجهة / مسؤول الجهة | المسؤول بتاع العميل نفسه | بيدير جهته بنفسه: البراند، وتشغيل الـ modules، والاشتراك والمقاعد، وكمان — من المسار اللي بيحسب المقاعد — بيعمل مستخدمين وبيوزّع أدوار. |
| مسؤول الفوترة / الحساب | مسؤول المالية أو المالك في الجهة | بيشوف الباقة، ودورة حياة الاشتراك، والإضافات، وأحداث الفوترة، واستهلاك المساحة. |
| صاحب المصلحة | بيعمل إيه | الـ modules الأساسية ليه |
|---|---|---|
| المستخدم / الموظف | شغل كل يوم: بريد، وشات، وملفات، واجتماعات، ومهام، وأخبار، وبحث في التليفونات، وطلبات، وإدخال قيم مؤشرات | الـ shell + كل الـ modules المتاحة للجهة |
| مدير الإدارة | بيشرف على إدارة؛ وبيوافق على الطلبات اللي بتيجي عليه؛ وبيدير تقويم الإدارة ومهامها | WorkFlow، KPIS، التقويم، الموارد البشرية (قراءة) |
| المشرف | إشراف من غير صلاحيات إدارة كاملة — بيراجع ويتابع في حدود نطاقه | أكتر من module |
| مسؤول الموارد البشرية / التنظيم | بيمسك سجل الأشخاص والهيكل التنظيمي: الأشخاص، والإدارات، والوظايف، والدرجات، والتليفونات | HR / Organization |
| مكتب الوارد (Receive Desk) | بيسجّل المراسلات الرسمية الواردة وبيوجّهها | DWMail |
| مكتب المراجعة (Review Desk) | بيراجع المراسلات وبيوافق عليها | DWMail |
| مكتب السكرتارية (Secretary Desk) | الإنهاء النهائي، والتوقيع والختم، والأرشفة | DWMail |
| المعتمِد / الموقِّع | بيوافق على طلبات الـ WorkFlow أو بيوقّع على المراسلات (عنده توقيع إلكتروني) | WorkFlow، DWMail |
| منظّم الاجتماع | بيحدد الاجتماعات وبيديرها وبيسجّلها؛ وبيشارك التسجيلات | الاجتماعات |
| ناشر / محرّر الأخبار | بيكتب الأخبار الداخلية وبينشرها | News |
| مدقق / مالك مؤشرات | بيملك الأنشطة والمؤشرات، وبيدخّل القياسات، وبيطلّع التقارير | KPIS |
| مساهم بالمحتوى | بيرفع ملفات ويشاركها، ويعلّق، ويعمل @mention | Drive، مركز التعاون |
خدمة backend بتنادي واحدة تانية بـ system JWT (مثلًا WorkFlow بيبعت موافقة للـ Hub). بتشتغل بصلاحيات أعلى، ومحصورة في الجهة، والأصل فيها المنع.
الـ modules بتنشر إشعارات، وتغييرات في مهام الشغل، وأحداث فهرسة؛ والـ Hub بيستهلكها. وكل حدث شايل معاه رقم الجهة.
بتستقبل البريد الحقيقي وبتمرّره لباك‑إند المراسلات (سيرفر البريد بتاع DWMail نفسه).
برنامج مزامنة الـ Drive ومُنبّه ويندوز في شريط المهام — برامج مسلَّمة للعميل بتدخل بحساب وبتكلّم الـ backend.
DWPlatform مش بتستخدم قايمة أدوار واحدة مسطّحة — في محرك صلاحيات موحّد، وفهم شكله العام أساسي لفريق الجودة (والتفصيل كله في كورس الصلاحيات):
مفيش «يقرأ المرتبات» لوحدها — في «يقرأ المرتبات» على مين: نفسه، فريقه، إدارته، شركته، الكل. السبع نطاقات بتتحسب من الهيكل التنظيمي لحظة السؤال.
الوظيفة المتكررة بتاخد حزمة جاهزة (مدير مباشر، مسؤول شؤون…)، والاستثناء بياخد منحة مؤقتة بسبب مكتوب. والمنع بيكسب على الاتنين.
القرار بيتاخد عند السيرفر في كل طلب — عشان كده سحب صلاحية بيسري في ثواني ومن غير ما حد يخرج ويدخل. لو بتختبر: متستنتجش حاجة من محتوى التوكن.
حاجة منفصلة عن القدرات — بتسجّل وضع المستخدم جوه الجهة (مالك / مسؤول / عضو)، ودي اللي محكومة بمقاعد الباقة.
مسؤول الجهة بياخد كل صلاحيات جهته تلقائيًا (ومشغّل المنصة كل صلاحيات المنصة) — والاستثناء الوحيد اللي بيتغلب عليه هو «المنع» الصريح.
401 = مش مسجّل دخول. 403 = مسجّل بس مش مصرّح له بالفعل ده. و404 على سجل معيّن ممكن تكون «موجود بس بره نطاقك» — إخفاء الوجود نفسه مقصود.
| الدور | بيدّي إيه | بيفرق فين |
|---|---|---|
| Admin | وصول كامل لكل الخصائص | كل الـ modules |
| User | مستخدم عادي بوصول محدود | كل الـ modules |
| Manager | خصائص على مستوى الإدارة | WorkFlow، KPIS، الموارد البشرية، التقويم |
| Supervisor | قدرات إشراف ومتابعة | أكتر من module |
| HRAdmin | صلاحيات موارد بشرية أعلى | HR / Organization |
| الدور | بيدّي إيه |
|---|---|
| ReceiveDesk | بيتعامل مع المراسلات الواردة (تسجيل وتوجيه) |
| ReviewDesk | بيراجع المراسلات وبيوافق عليها |
| SecretaryDesk | الإنهاء والأرشفة (توقيع / ختم) |
| الدور | بيدّي إيه |
|---|---|
| CalendarAdmin / CalendarManager | إدارة التقويم / وصول لتقويم الإدارة |
role:DWPlatform.News=Admin | ContentManagement | كتابة الأخبار — إدارة كاملة مقابل محتوى بس |
role:DWPlatform.Media=Admin | إدارة الـ Drive (المساحات، والحجر، والقوالب) |
| أدوار على مستوى الملف في الـ Drive: Viewer / Downloader / Editor | وصول لكل ملف: مشاهدة بس / تحميل / تعديل كامل |
KPIS Auditor / IsKpiAdmin | يملك ويعدّل الأنشطة ويدخّل القيم / يدير كل الأنشطة |
| الدور | بيدّي إيه |
|---|---|
| SuperAdmin / مشغّل المنصة | بيشغّل الـ SaaS في كل الجهات؛ وهو تلقائيًا Admin في كل حتة |
| مالك / مسؤول الجهة | بيدير جهة واحدة بنفسه |
في نظامين أدوار منفصلين، بيتظبطوا في مكانين مختلفين، وبيتحكم فيهم جهتين مختلفتين. واللعبة كلها إنك تعرف مين فيهم مين:
قيمة واحدة بس لكل
مستخدم جوه الجهة — TenantAdmin أو User (والمالك مقفول على
TenantAdmin). ده هو المقعد: لما تعمل مستخدم أو ترقّيه لمسؤول بتستهلك مقعد من الباقة.
دي وحدة القدرة الحقيقية —
صف (مستخدم × دور × خدمة) بيتحوّل لـ claim في التوكن شكله
role:DWPlatform.{Service}=Role. وده اللي كل module بيتحقق منه. ومش بيستهلك
مقاعد.
| الإجراء | مين يقدر يعمله | مين بيفرضه |
|---|---|---|
| إنشاء مستخدم وتحديد دوره في الجهة؛ وتغيير دور مستخدم (عضو ↔ مسؤول)؛ وحذف مستخدم | مسؤول الجهة بتاعها، أو SuperAdmin من المنصة | الـ policy RequireTenantAdmin (الـ claim tenant_role=TenantAdmin أو is_superadmin=true). ومحكوم بالمقاعد — بيرجّع 409 لما توصل لحد الباقة في المستخدمين أو المسؤولين. |
إسناد أو سحب دور خدمة (مثلًا تدّي حد ReceiveDesk على DWMail) | مستخدم عنده دور عام Admin / Manager / HRAdmin، أو دور خدمة Identity‑Admin (role:DWPlatform.Identity=Admin)؛ والـ SuperAdmin بيعدّي تلقائي | الـ policy RequireManagerOrAdmin. ومش محكوم بالمقاعد، ومش لازم يكون الـ module متاح للجهة. |
| إنشاء اسم دور جديد خالص (لأدوار مش موجودة في الكتالوج الجاهز) | نفس اللي فوق (RequireManagerOrAdmin) | POST /api/v1/roles. الأدوار حرة تمامًا؛ والكتالوج اللي تحت ده مجرد اللي متزرّع جاهز. |
إدارة المستخدمين والأدوار مكانها تطبيق الـ IAM (DWPlatform.Identity.FE — قسم
«الهوية / المستخدمين» في إدارة الـ shell). وفيه شاشتين:
| عايز تعمل إيه | الخطوات |
|---|---|
| تضيف مستخدم جديد | الهوية ← المستخدمون ← إضافة مستخدم ← الإيميل (واختياري باسورد أو اسم مستخدم) واختار عضو ولا مسؤول ← احفظ. لو الباقة خلصت مقاعدها، الحفظ هيترفض برسالة «وصلت لحد المقاعد». |
| تخلّي حد مسؤول جهة (أو ترجّعه عضو) | الهوية ← المستخدمون ← صف المستخدم ← تغيير الدور ← اختار مسؤول (TenantAdmin) أو عضو (User) ← أكّد. (المالك مش ممكن ينزل، وآخر مسؤول مش ممكن يتشال.) |
| تدّي حد دور خدمة (قدرة) | الهوية ← المستخدمون ← افتح المستخدم (صفحة المستخدم) ← كارت الأدوار ← إضافة ← اختار الخدمة (مثلًا DWMail / المراسلات) ← اختار الدور (مثلًا ReceiveDesk) ← إسناد. وتسحبه بعد كده من علامة سلة المهملات جنب الدور. ولازم المستخدم يخرج ويدخل تاني عشان الـ claim الجديد يشتغل. |
وزّع دول كـ أدوار خدمة على الخدمة المذكورة، إلا لو مكتوب غير كده. و«أي موظف» معناها إنه مش محتاج أي دور غير إنه عضو في الجهة.
| عشان تخلّي حد… | إدّيه | على خدمة |
|---|---|---|
| موظف عادي | — (عضو في الجهة وبس) | — |
| مسؤول الجهة | دور الجهة مسؤول (المستخدمون ← تغيير الدور) | العضوية في الجهة |
| مكتب الوارد في المراسلات | ReceiveDesk | DWMail / المراسلات |
| مكتب المراجعة في المراسلات | ReviewDesk | DWMail / المراسلات |
| مكتب السكرتارية (توقيع/ختم/أرشفة) | SecretaryDesk + توقيع إلكتروني مرفوع (الإعدادات ← التوقيعات) | DWMail / المراسلات |
| مدير البريد / مدير المكتب (يدير حاجات غيره) | Admin أو Manager (على البريد) / OfficeManager* | DWMail / المراسلات |
| مكتب الإرسال الخارجي (يبعت بره الجهة) | ExternalSendingOffice* أو Director* — أو ببساطة Admin | DWMail / المراسلات |
| مسؤول الموارد البشرية / التنظيم | HRAdmin | HR / Identity |
| مسؤول أو مدير التقويم | CalendarAdmin / CalendarManager | التقويم |
| ناشر الأخبار | Admin أو ContentManagement | News |
| مسؤول الـ Drive (المساحات، الحجر) | Admin | Media |
| مدقق أو مسؤول المؤشرات | Auditor* / Admin | KPIS |
| مستخدم متميّز في module واحد | Admin | الـ module ده |
ExternalSendingOffice وDirector
وOfficeManager وAuditor) مش موجودة أصلًا لحد ما مسؤول Identity يعمل اسم الدور
مرة واحدة (POST /api/v1/roles، أو من زرار «دور جديد» في تطبيق الـ IAM)، وبعدين يسنده على الخدمة.
والأدوار المزروعة جاهزة هي Admin, User, Manager, Supervisor, HRAdmin, ReceiveDesk, ReviewDesk, SecretaryDesk,
CalendarAdmin, CalendarManager. وبالنسبة للإرسال الخارجي بالذات، إن حد ياخد Admin على DWMail (أو
يكون SuperAdmin) ده كفاية من غير أي دور مخصص — بص على دليل البريد §١٢.● كامل/أساسي · ◐ جزئي/محصور · ○ الحد الأدنى أو على نفسه بس. وبرضه ظهور الـ module نفسه متوقف على الـ entitlements بتاعة الجهة.
| الدور | Identity | HR | /admin في الـ Shell | DWMail | WorkFlow | KPIS | Chat | Meet | Drive | News |
|---|---|---|---|---|---|---|---|---|---|---|
| SuperAdmin | ● | ● | ● اللوحة | ● | ● | ● | ● | ● | ● | ● |
| مسؤول الجهة | ◐ | ◐ | ● جهته | ◐ | ◐ | ◐ | ◐ | ◐ | ◐ | ◐ |
| Admin | ● | ● | ◐ | ● | ● | ● | ● | ● | ● | ● |
| Manager | ○ | ◐ | ○ | ◐ | ● موافقة | ● إدارته | ● | ● | ● | ○ |
| HRAdmin | ○ | ● | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
| مكاتب المراسلات | ○ | ○ | ○ | ● مسار المكتب | ○ | ○ | ○ | ○ | ○ | ○ |
| User (موظف) | ○ نفسه | ○ عرض | ○ | ● بريده | ● يقدّم طلب | ● يشارك | ● | ● | ● | ● يقرا |