# Auto Permission Module

## 1. Pengenalan

Auto Permissions adalah feature untuk **auto-generate permission** berdasarkan Model Eloquent yang dipilih, tanpa perlu create permission satu-satu secara manual. Dibina dalam format README asal, lengkap dengan dokumentasi internal.

## 2. Routes

| Method | URI | Permission | Name |
|--------|-----|------------|------|
| GET | `/admin/auto-permissions` | `permission.create` | `auto-permissions.index` |
| POST | `/admin/auto-permissions/generate` | `permission.create` | `auto-permissions.generate` |

## 3. Controller — `AutoPermissionController`

**Functions:**
- `index()` — Scan `app/Models/Backend/` dan extract route permissions, papar dalam table dengan stats (Total, Generated, Missing). Paginated 15/page.
- `generate(Request)` — Create permission berdasarkan model + actions terpilih, assign ke roles. Clear cache.

**Key Methods:**
- `getModels()` — Scan models dalam `app/Models/Backend/`, exclude translation models.
- `extractRoutePermissions()` — Parse semua route middleware cari `permission:` pattern.
- `getPermissionPrefix()` — Convert model class name ke kebab-case prefix.
- `getModuleNameFromPrefix()` — Map prefix ke module name.

## 4. Cara Kerja

1. Controller scan `app/Models/Backend/` untuk cari model
2. Extract permission dari route middleware
3. Klik Generate — `Permission::firstOrCreate()`, assign ke role, clear cache

## 5. Views

- `index.blade.php` — Stats cards (Total, Generated, Missing) + Generate form (Model select, Actions checkbox, Roles multi-select via Select2) + Table list semua permissions dengan status Generated/Missing.

## 6. Model

Tiada model khusus — guna `Spatie\Permission\Models\Permission` dan `Role`.

## 7. Permissions

| Permission | Keterangan |
|------------|------------|
| `permission.create` | Akses halaman Auto Permissions |

Route guard guna permission sedia ada (`permission.create`) — jadi hanya user yang ada akses **Permissions > Create** boleh guna feature ni.

## 8. Excluded Models

```php
protected array $excluded = [
    'ContentSliderTranslation',
    'ContentArticleTranslation',
    'ContentApplicationTranslation',
    'ContentDownloadTranslation',
    'ContentVideoTranslation',
    'ContentPhotoGalleryTranslation',
    'VisitorSetting',
];
```
