الواجهة بتعرض كل حاجة بغضّ النظر عن صلاحية المستخدم — مثال: زرار «إضافة طلب شراء» بيظهر لأي يوزر داخل على الشاشة، حتى لو المفروض عنده «عرض» بس.
حاسس إن مش كل المزايا ليها صلاحيات مسجّلة — ضرب مثال بموديول الإنتاج/التصنيع؛ محتاج المنظومة تتراجع كويس.
الهدف من التحليل: نفهم بالظبط ليه «كله بيظهر»، ونتأكد فين الصلاحيات فعلًا ناقصة، ونطلّع خطة إصلاح مرتّبة قبل أي كود.
٢. الوضع الحالي (ما هو موجود — بمراجع دقيقة)
البنية سليمة أساسًا
مصدر الصلاحيات: بتيجي على كائن المستخدم (roles[], permissions[]) من /auth/me واللوجين — core/models/auth.model.ts:39، وبتتخزّن في NgRx + localStorage، وPermissionService بيقرأها كـsignal.
الكتالوج في الباك: مصفوفة واحدة فيها ١٠٠٠ صلاحية — RolePermissionSeeder.php::permissions() 210–1347، بتتزرع في جدول permissions (guard web)، وبتوصل العملاء عند التحديث عبر GrantRolePermissionsSeeder (إضافي، مبيشيلش).
تجاوز السوبر-أدمن: دور super-admin (أو مستخدم بأدوار+صلاحيات فاضية) بيعدّي كل الفحوصات — permission.service.ts:29 + Gate::before في الباك.
دليل مباشر على شكوى المالك:purchases/requests/requests.component.html:6 — زرار «طلب جديد» <p-button (onClick)="openNew()"> من غير أي *appCan. نفس النمط في المبيعات/HR/POS/المخزون/المحاسبة.
ب) «الإنتاج ناقص صلاحيات» — الواقع مختلف (باك)
الإنتاج فعليًا أكثر موديول مقيّد في النظام:44/44 Controller بيفرضوا صلاحيات، ٦٩ صلاحية مسجّلة، صفر endpoint مكشوف. فمش «ناقص تطبيق». لكن فيه ٣ أسباب ممكن تخلّي المالك يحسّها ناقصة 👇
صلاحيات خشنة (umbrellas):production.costing لوحدها بتغطّي الانحرافات + الأوفرهيد + التكلفة المعيارية؛ production.consume بتغطّي الـstaging + backflush + صرف المواد؛ production.reports.view بتغطّي ~٢٠ تقرير. فلو عايز فصل مهام أدقّ جوّه الإنتاج — الفجوة هنا «خشونة» مش «غياب».
١٢ دور خاص بالإنتاج مش بيوصلوا العملاء:ProductionRoleSeeder.php (production_cost_accountant, production_manager, …) مش مسجّل في seeders الـMoonStack — فالتثبيت/التحديث مبيجبهمش.
أسماء خام: منتقي الصلاحيات بيرجّع label == key (نص خام)، والفرونت بيترجم عبر ROLES.RESOURCES.*/ACTIONS.* — فأي resource/action في الإنتاج مالوش مفتاح ترجمة بيظهر خام/مبهم.
مجموعة endpoints في LIS بلا أي صلاحية ولا middleware — أي مستخدم مسجّل يقدر يستدعيها: المضادات الحيوية (antibiotics CRUD)، الهيستوباثولوجي (النتائج + القوالب)، شركاء الباقات، تعيين باقات المعامل الخارجية — LIS/routes/api.php:489,605,785–810. ومفيش صلاحية lis.antibiotics.*/lis.histopath-templates.* أصلًا، فمش بتظهر في الشاشة وبتفضل مفتوحة.
P0تقييد الأزرار في الواجهة (شكوى المالك #1). إضافة *appCan على كل أزرار الإضافة/التعديل/الحذف/الاعتماد في الموديولات غير المغطّاة (المشتريات، المبيعات، HR، POS، المخزون، المحاسبة، إدارة-Core)، بسلاسل مطابقة لكتالوج الباك بالحرف. + إصلاح مشكلة النقطة الأخيرة (استخدام فحص بادئة للأزرار prefix بدل can() التامّة، أو تصحيح السلاسل). ملفات: أعلاه · اختبار: build أخضر + فحص يدوي بيوزر «عرض».
2
P0سدّ endpoints المكشوفة في LIS. إضافة صلاحيات (lis.antibiotics.*, lis.histopath.*, lis.histopath-templates.*, lis.packages.partners.*, lis.external-labs.packages.*) لكتالوج الباك + permission: middleware على الكونترولرات الأربعة. [أمني — أولوية].
3
P1وضوح شاشة الأدوار + الترجمة. استكمال مفاتيح ROLES.RESOURCES.*/ACTIONS.* لكل الموديولات (الإنتاج أولًا) عشان الصلاحيات تظهر بأسماء عربية واضحة بدل النص الخام.
4
P1إيصال أدوار الإنتاج للعملاء. تسجيل ProductionRoleSeeder في seeders تحديث MoonStack (إضافي، غير هدّام) — فالـ١٢ دور توصل التثبيتات.
5
P2توحيد محرّرات الأدوار/المستخدمين (قرار مالك — قسم ٨): دمج core/lis/clinic في مدخل واحد، أو الإبقاء على «قشرة» لكل موديول مع توضيح.
التغيير الأساسي «غير مرئي»: نفس الشاشات، لكن أزرار الحركة تختفي لمن مالوش صلاحيتها. مثال — شاشة طلبات الشراء ليوزر معاه purchases.requests.view فقط:
قبل (الحالي) — كل الأزرار ظاهرة ❌
طلبات الشراء+ طلب جديد
الرقم
المورّد
الحالة
إجراءات
PR-0007
مورّد أ
مسودة
تعديلحذفاعتماد
بعد (المتوقّع) — أزرار الحركة مخفية ✅
طلبات الشراء+ طلب جديد
الرقم
المورّد
الحالة
إجراءات
PR-0007
مورّد أ
مسودة
تعديلحذفاعتمادعرض فقط
التطبيق: *appCan="'purchases.requests.create'" على «طلب جديد»، و.update/.delete/.approve على أزرار الصف. نفس النمط يتكرّر على كل الشاشات غير المغطّاة. شاشة /core/roles نفسها كويسة ومش محتاجة إعادة تصميم — بس ترجمة أوضح (WP3).
تحليل قراءة-فقط · فحص Opus لـ BE+FE · مراجع دقيقة من تقريرَي الوكيلين · لم تُعدَّل أي بيانات أو كود. بانتظار موافقة المالك قبل أي تنفيذ.