🔄 مقارنة LabOrderStagePolicy

❌ الكود القديم (الحالي)

// مفقودة - لا يوجد isCompanyOwner

public function viewAny(User $user)
{
    return $user->hasPermission(
        'dental-lab.lab-order-stages.view'
    );
}

public function view(User $user, LabOrderStage $labOrderStage)
{
    return $user->company_id === $labOrderStage->labOrder->company_id && 
           $user->hasPermission(
               'dental-lab.lab-order-stages.view'
           );
}

public function create(User $user)
{
    return $user->hasPermission(
        'dental-lab.lab-order-stages.create'
    );
}

✅ الكود الجديد (المطلوب)

// ✅ جديد
private function isCompanyOwner(User $user)
{
    $company = $user->company;
    return $company && 
           $company->owner_user_id === $user->id;
}

public function viewAny(User $user)
{
    return $this->isCompanyOwner($user) || 
           $user->hasPermission(
               'dental-lab.lab-order-stages.view'
           );
}

public function view(User $user, LabOrderStage $stage)
{
    if ($user->company_id !== 
        $stage->labOrder->company_id) return false;
    return $this->isCompanyOwner($user) || 
           $user->hasPermission(
               'dental-lab.lab-order-stages.view'
           );
}

public function create(User $user)
{
    return $this->isCompanyOwner($user) || 
           $user->hasPermission(
               'dental-lab.lab-order-stages.create'
           );
}

📊 الملخص

المشاكل في الكود القديم:

الحل في الكود الجديد:

التغييرات التفصيلية:

1️⃣ إضافة `isCompanyOwner()` method
يتحقق من أن المستخدم هو مالك الشركة
2️⃣ تحديث `viewAny()`
تم الإضافة فحص `isCompanyOwner()`
3️⃣ تحديث `view()` و `create()`
تم الإضافة فحص `isCompanyOwner()` إلى كل method
4️⃣ تحديث `update()`, `delete()`, `restore()`, `forceDelete()`, `complete()`
تم الإضافة فحص `isCompanyOwner()` إلى جميع الـ methods

مقارنة الـ Permissions:

الصلاحية الوصف الحالة
dental-lab.lab-order-stages.view عرض المراحل موجودة ✅
dental-lab.lab-order-stages.create إضافة مرحلة جديدة موجودة ✅
dental-lab.lab-order-stages.edit تعديل مرحلة موجودة ✅
dental-lab.lab-order-stages.delete حذف مرحلة موجودة ✅

مقارنة مع ClinicPolicy (المرجع):

الميزة ClinicPolicy LabOrderStagePolicy (بعد) التوحيد
isCompanyOwner() ✅ موجودة ✅ موجودة 100% ✅
viewAny() ✅ isCompanyOwner || permission ✅ isCompanyOwner || permission 100% ✅
view() ✅ company check + isCompanyOwner ✅ company check + isCompanyOwner 100% ✅
create() ✅ isCompanyOwner || permission ✅ isCompanyOwner || permission 100% ✅

🚀 الخطوات التالية

  1. افتح app/Policies/DentalLab/LabOrderStagePolicy.php
  2. استبدل المحتوى بالكود الجديد من LAB_ORDER_STAGES_POLICY_UPDATED.php
  3. شغّل: php artisan db:seed --class=DentalLabPermissionsSeeder
  4. امسح الـ Cache: php artisan cache:clear
  5. اختبر: http://localhost:8000/dental-lab/orders/stages/1