# تعليمات استخدام السكريبتات لإخفاء أزرار الإضافة والتعديل والحذف للـ Super Admin

## نظرة عامة
هذه السكريبتات تقوم بتطبيق التعديلات التالية على مشروع Laravel + Filament:

1. **تحديث ResourceHelper.php**: إرجاع القيود الأصلية على صلاحيات Super Admin
2. **تحديث صفحات List**: إخفاء زر الإضافة للـ Super Admin
3. **تحديث ملفات Table**: إخفاء أزرار التعديل والحذف للـ Super Admin

## المتطلبات
- مشروع Laravel + Filament
- وجود ملف `app/Helpers/ResourceHelper.php`
- صلاحيات كتابة على ملفات المشروع

## طريقة الاستخدام

### 1. للـ Windows (PowerShell)

```powershell
# انتقل لمجلد المشروع الثاني
cd "D:\path\to\other\project"

# نسخ السكريبت للمشروع
copy "D:\My Work\Laravel\elfeky_agri\hide_admin_actions.ps1" .

# تشغيل السكريبت
.\hide_admin_actions.ps1
```

أو تشغيل مباشرة بدون نسخ:
```powershell
powershell -ExecutionPolicy Bypass -File "D:\My Work\Laravel\elfeky_agri\hide_admin_actions.ps1" "D:\path\to\other\project"
```

### 2. للـ Linux/Mac (Bash)

```bash
# انتقل لمجلد المشروع الثاني
cd /path/to/other/project

# نسخ السكريبت للمشروع
cp /path/to/elfeky_agri/hide_admin_actions.sh .

# إعطاء صلاحيات التنفيذ
chmod +x hide_admin_actions.sh

# تشغيل السكريبت
./hide_admin_actions.sh
```

أو تشغيل مباشرة:
```bash
bash /path/to/elfeky_agri/hide_admin_actions.sh /path/to/other/project
```

## ما الذي يفعله السكريبت؟

### الخطوة 1: تحديث ResourceHelper.php
يقوم بتعديل دالتين:
- `canViewAny()`: تحديد الـ Resources المسموح للـ Super Admin عرضها
- `canCreate()`: تحديد الـ Resources المسموح للـ Super Admin إضافتها

### الخطوة 2: تحديث صفحات List*.php
يضيف هذا الشرط في بداية `getHeaderActions()`:
```php
// إخفاء زر الإضافة للـ Super Admin (يظهر فقط للـ Tenant Owner)
if (auth()->user()?->is_system_admin && !auth()->user()?->is_tenant_owner) {
    return [];
}
```

**ملاحظة**: يتم استثناء:
- `ListUsers.php`
- `ListTenants.php`

### الخطوة 3: تحديث ملفات *Table.php
يضيف `->visible()` للـ EditAction و DeleteAction:
```php
EditAction::make()
    ->visible(fn() => !auth()->user()?->is_system_admin || auth()->user()?->is_tenant_owner),
DeleteAction::make()
    ->visible(fn() => !auth()->user()?->is_system_admin || auth()->user()?->is_tenant_owner),
```

**ملاحظة**: يتم استثناء:
- `UsersTable.php`
- `TenantsTable.php`

### الخطوة 4: مسح الكاش
```bash
php artisan optimize:clear
php artisan filament:optimize
```

## النسخ الاحتياطية
السكريبت يقوم تلقائياً بإنشاء نسخ احتياطية من كل ملف بامتداد `.backup`

### استرجاع النسخ الاحتياطية

**PowerShell:**
```powershell
Get-ChildItem -Recurse -Filter "*.backup" | ForEach-Object { 
    Move-Item $_.FullName ($_.FullName -replace "\.backup$","") -Force 
}
```

**Bash:**
```bash
find . -name "*.backup" -exec sh -c 'mv "$1" "${1%.backup}"' _ {} \;
```

## مثال على الاستخدام الكامل

```powershell
# 1. نسخ السكريبت للمشروع الآخر
cd "D:\Projects\other_laravel_project"
copy "D:\My Work\Laravel\elfeky_agri\hide_admin_actions.ps1" .

# 2. تشغيل السكريبت
.\hide_admin_actions.ps1

# 3. مراجعة النتائج
# ستظهر رسائل تأكيد لكل ملف تم تحديثه

# 4. اختبار التطبيق
php artisan serve

# 5. في حالة وجود مشاكل، استرجع النسخ الاحتياطية
Get-ChildItem -Recurse -Filter "*.backup" | ForEach-Object { 
    Move-Item $_.FullName ($_.FullName -replace "\.backup$","") -Force 
}
```

## ملاحظات هامة

1. **تأكد من عمل نسخة احتياطية كاملة** من المشروع قبل التشغيل
2. السكريبت يتجاهل الملفات التي سبق تعديلها لتجنب التكرار
3. راجع التغييرات بعد التشغيل للتأكد من صحتها
4. اختبر التطبيق بعد التشغيل للتأكد من عمل كل شيء بشكل صحيح

## استكشاف الأخطاء

### المشكلة: "cannot be loaded because running scripts is disabled"
**الحل:**
```powershell
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
```

### المشكلة: ملفات لم يتم تحديثها
**الحل:**
- تأكد من وجود الملفات في المسار الصحيح
- راجع صلاحيات الكتابة على المجلدات
- تحقق من أن الملفات تحتوي على الكود المتوقع

### المشكلة: أخطاء بعد التشغيل
**الحل:**
1. استرجع النسخ الاحتياطية
2. راجع الملفات يدوياً
3. طبق التعديلات يدوياً على الملفات المطلوبة

## الدعم
إذا واجهت أي مشاكل:
1. تحقق من النسخ الاحتياطية (*.backup)
2. راجع ملفات الـ Log في Laravel
3. تحقق من صلاحيات الملفات والمجلدات
