دراسة حالة · نظام ERP لشركة الرداوي
نموذج صلاحيات مبنيّ على شركة حقيقية
شركة الرداوي للمقاولات والخدمات النفطية شركة سورية تعمل منذ عام 1997 في قطاعات النفط والغاز والطاقة والبنية التحتية. صمّمتُ نظام الإدارة الداخلي الخاص بفرقها وبنيتُه.

المشكلة
تضم الشركة أقسامًا ووحدات استشارية كثيرة تعمل جنبًا إلى جنب: المحاسبة والموازنة، والموارد البشرية، والخدمات العامة، وضبط التكاليف، والاستشارات الضريبية، واستشارات الرواتب والتأمينات الاجتماعية، وغيرها. ولكلٍّ منها مديرها وموظفوها وخدماتها.
نظام الأدوار التقليدي يجيب عن سؤال واحد: ماذا يستطيع هذا الشخص أن يفعل؟ لكن شركة كهذه تحتاج إلى إجابة ثانية أيضًا: أين يستطيع أن يفعل ذلك؟ فقد يحق لموظف الموارد البشرية الاطلاع على سجلات الموظفين، لكن في الوحدات التي يخدمها فقط. ويجب ألّا يحصل أحد على صلاحية تشمل الشركة كلها عن طريق الخطأ.
البنية
تتواصل واجهة Vue 3 أحادية الصفحة مع واجهة برمجية ASP.NET Core على .NET 8. ويمرّ كل طلب بالمصادقة، ثم بمحرّك الصلاحيات والنطاق، قبل أن يصل إلى منطق الأعمال وإلى SQL Server عبر Entity Framework Core.
طبقتان من الصلاحيات
يُتّخذ قرار الوصول على طبقتين لا تتداخل مهامّهما:
- صلاحيات الإجراءات تأتي من الأدوار وتجيب عن ماذا: عرض الموظفين، أو الموافقة على سلفة، أو إرسال رسالة عامة.
- تعيينات النطاق تجيب عن أين. تُربط بحساب محدد أو بكل من يحمل دورًا معينًا، وتحصر صلاحية موجودة أصلًا في وحدات مختارة.
ثلاث قواعد لا يكسرها المحرّك أبدًا. تعيين النطاق لا يمنح إجراءً جديدًا، بل يضيّق إجراءً موجودًا فقط. والرفض الصريح يتقدّم دائمًا على أي سماح. والوصول على مستوى الشركة كلها لا يكون ضمنيًا أبدًا، بل يجب منحه عن قصد.
وبصورة مبسّطة، يجري كل فحص على هذا النحو:
bool CanAccess(User user, string action, Unit target)
{
if (Denies(user, action, target)) return false; // explicit deny wins
if (!HasAction(user, action)) return false; // what
if (!ScopeCovers(user, action, target)) return false; // where
return true;
}

الشركة على هيئة بيانات
تعيش الأقسام والوحدات الاستشارية والوحدات في شجرة واحدة. تعرف كل عقدة فيها موظفيها ووحداتها الفرعية ومديرها، وتعرض الخدمات التي يمكن للآخرين طلبها منها، مثل سلف الموظفين، والرسائل العامة، وقيود التكاليف المباشرة وغير المباشرة. والشجرة نفسها تغذّي محرّك النطاق، فتتبع الصلاحيات الهيكلَ الفعلي للشركة.
ويدعم النظام أيضًا المدير العام بالوكالة، لتفويض الصلاحيات بشكل منظّم عند غياب المدير العام.
تفاصيل تهمّ من يستخدمه
- واجهة كاملة بالعربية والإنجليزية مع تخطيط من اليمين إلى اليسار، قابلة للتبديل في أي وقت.
- وضعان فاتح وداكن.
- بحث في مساحة العمل، ودليل «كيف تستخدم هذه الصفحة» في الشاشات المعقدة.
- شاشة دخول وصياغة موجّهة لفرق الشركة نفسها.

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