# Akses Manajemen Aset - Admin Only

## Perubahan
Manajemen Aset telah dikonfigurasi agar **hanya Admin** yang dapat mengaksesnya. Guru dan role lainnya tidak memiliki akses ke fitur ini.

## Konfigurasi Routes
File: `routes/web.php` (baris 88-92)

```php
// Manajemen Aset, Peminjaman & Pengembalian (Admin only)
Route::middleware('role:admin')->group(function () {
    Route::resource('aset', AsetController::class);
    Route::resource('aset-peminjaman', PeminjamanAsetController::class);
    Route::resource('aset-pengembalian', PengembalianAsetController::class);
});
```

## Fitur yang Dibatasi untuk Admin Saja

### 1. Manajemen Aset
- **Route:** `/simaju/aset`
- **Controller:** `AsetController`
- **Actions:**
  - Index: Lihat daftar aset
  - Create: Tambah aset baru
  - Store: Simpan aset baru
  - Show: Lihat detail aset
  - Edit: Edit aset
  - Update: Update aset
  - Destroy: Hapus aset

### 2. Peminjaman Aset
- **Route:** `/simaju/aset-peminjaman`
- **Controller:** `PeminjamanAsetController`
- **Actions:**
  - Index: Lihat daftar peminjaman
  - Create: Buat peminjaman baru
  - Store: Simpan peminjaman
  - Show: Lihat detail peminjaman
  - Edit: Edit peminjaman
  - Update: Update peminjaman
  - Destroy: Hapus peminjaman

### 3. Pengembalian Aset
- **Route:** `/simaju/aset-pengembalian`
- **Controller:** `PengembalianAsetController`
- **Actions:**
  - Index: Lihat daftar pengembalian
  - Create: Proses pengembalian
  - Store: Simpan pengembalian
  - Show: Lihat detail pengembalian
  - Edit: Edit pengembalian
  - Update: Update pengembalian
  - Destroy: Hapus pengembalian

## Cara Kerja

### Skenario 1: Admin Login
1. Admin login ke sistem
2. Dapat mengakses menu "Manajemen Aset"
3. Dapat melihat, menambah, mengedit, dan menghapus aset
4. Dapat mengelola peminjaman dan pengembalian aset

### Skenario 2: Guru/User Lain Mencoba Akses
1. Guru atau user dengan role lain login
2. Mencoba mengakses URL manajemen aset (misal: `/simaju/aset`)
3. Sistem akan memblokir akses dengan middleware `role:admin`
4. User akan di-redirect atau menerima error 403 (Forbidden)

## Middleware Protection

Route menggunakan middleware `role:admin` yang memvalidasi:
```php
Route::middleware('role:admin')->group(function () {
    // Only users with role 'admin' can access these routes
});
```

Middleware ini memastikan bahwa:
- Hanya user dengan `role = 'admin'` di tabel `users` yang dapat akses
- Request dari role lain akan ditolak secara otomatis
- Tidak perlu pengecekan tambahan di controller

## Keamanan

### Layer Proteksi
1. **Middleware Level**: `role:admin` di route definition
2. **Route Level**: Semua routes aset berada dalam grup admin-only
3. **Menu Level**: Menu aset hanya tampil untuk admin di sidebar (UI level protection)

### Validasi
- Middleware Laravel secara otomatis mengecek role user
- Jika role tidak sesuai, request ditolak sebelum sampai ke controller
- Error handling dilakukan oleh middleware

## Perbedaan dengan Fitur Lain

### Fitur Admin & Guru (dapat diakses keduanya):
- Data Siswa
- Data Nilai
- Data Absensi
- Jurnal Mengajar
- Modul Ajar
- Jadwal Pelajaran
- dll

### Fitur Admin Only (hanya admin):
- **Manajemen Aset** ← BARU
- **Peminjaman Aset** ← BARU
- **Pengembalian Aset** ← BARU
- Data Master (Jurusan, Guru, Mapel, Kelas)
- Kalender Pendidikan
- Analisis Kaldik
- Kartu Pelajar

## Testing

### Test Case 1: Admin Akses Aset
- **User**: Admin
- **Action**: Akses `/simaju/aset`
- **Expected**: Berhasil, menampilkan halaman daftar aset

### Test Case 2: Guru Akses Aset
- **User**: Guru
- **Action**: Akses `/simaju/aset`
- **Expected**: Error 403 Forbidden atau redirect

### Test Case 3: Admin CRUD Aset
- **User**: Admin
- **Action**: Create, Read, Update, Delete aset
- **Expected**: Semua operasi berhasil

### Test Case 4: Guru Mencoba Direct URL
- **User**: Guru
- **Action**: Akses langsung URL seperti `/simaju/aset/create`
- **Expected**: Blocked oleh middleware

## Troubleshooting

### Problem: Admin Tidak Bisa Akses Aset
**Solusi:**
1. Pastikan field `role` di tabel `users` adalah `'admin'`
2. Clear cache aplikasi: `php artisan cache:clear`
3. Clear route cache: `php artisan route:clear`

### Problem: Guru Masih Bisa Akses Aset
**Solusi:**
1. Cek middleware di routes sudah benar: `role:admin`
2. Pastikan middleware `role` terdaftar di kernel
3. Clear route cache: `php artisan route:clear`

## Kesimpulan

Manajemen Aset kini hanya dapat diakses oleh Admin. Perubahan ini meningkatkan keamanan dengan memastikan hanya personel yang berwenang yang dapat mengelola inventaris aset sekolah. Guru dan role lainnya tidak memiliki akses ke fitur ini untuk mencegah perubahan data aset yang tidak diotorisasi.
