# Rencana Implementasi: Role-Based Access Control (RBAC)

Rencana ini akan membangun sistem keamanan berbasis peran (Role) dan hak akses (Permissions). Setiap pengguna akan memiliki menu sidebar yang berbeda sesuai dengan jabatan/hak yang diberikan oleh Admin.

## User Review Required

> [!IMPORTANT]
> **Super Administrator**: Secara default, pengguna dengan role `admin` akan memiliki akses ke semua menu tanpa pengecekan manual, sebagai sistem pengaman (bypass).
> 
> **Pembersihan Sesi**: Setelah sistem ini aktif, semua pengguna yang sedang login mungkin harus *Logout* dan *Login* kembali agar sistem bisa memuat daftar hak akses terbaru ke dalam sesi mereka.

## Proposed Changes

### 1. Struktur Data (Database)

#### [NEW] `permissions` Table
Menyimpan daftar kode hak akses secara granular. Contoh untuk modul Farm:
- `FARM_VIEW`: Hanya melihat daftar farm.
- `FARM_CREATE`: Bisa menambah data farm.
- `FARM_EDIT`: Bisa mengubah data.
- `FARM_DELETE`: Bisa menghapus data.
Sistem akan menyediakan daftar ini untuk semua modul utama (Inventory, Finance, Batch, dll).

#### [NEW] `role_permissions` Table
Tabel penghubung antara Role (misal: Supervisor) dengan daftar Permission yang diizinkan.

### 2. Logika Inti & Keamanan (Core)

#### [MODIFY] [Router.php](file:///c:/xampp/htdocs/myportal/poultrysystem/app/core/Router.php)
- Update fungsi `dispatch` agar bisa membaca parameter `middleware['permission']`. Jika user tidak punya akses, sistem akan menampilkan pesan "403 Forbidden".

#### [MODIFY] [User.php](file:///c:/xampp/htdocs/myportal/poultrysystem/app/models/User.php) & [AuthController.php](file:///c:/xampp/htdocs/myportal/poultrysystem/app/controllers/web/AuthController.php)
- Saat login berhasil, sistem akan mencari semua hak akses dari role user tersebut dan menyimpannya di `$_SESSION['user_permissions']`.

### 3. Antarmuka (Views)

#### [MODIFY] [admin.php (Sidebar)](file:///c:/xampp/htdocs/myportal/poultrysystem/app/views/layouts/admin.php)
- Bungkus setiap menu dengan pengecekan hak akses.
- Contoh: `if (hasPermission('FINANCE_VIEW')): ... link menu finance ... endif;`

#### [NEW] Modul Admin Keamanan
- **Manajemen Role**: Halaman untuk membuat jabatan baru (misal: "Staf Pakan").
- **Matrix Hak Akses**: Halaman khusus admin untuk mencentang menu mana saja yang boleh dibuka oleh setiap Role.

> [!TIP]
> **Keputusan Desain**: 
> 1. Satu pengguna hanya bisa memiliki **satu role utama** (misal: hanya Manager saja).
> 2. Hak akses bersifat **Granular** (Bisa diatur siapa yang boleh Edit namun tidak boleh Hapus).

## Open Questions 
(Semua pertanyaan telah dijawab oleh user).

## Verification Plan

### Automated/Manual Tests
- Buat user baru dengan role "Staf Kandang".
- Login sebagai staf tersebut.
- Pastikan menu "Keuangan" dan "Manajemen User" TIDAK MUNCUL di sidebar.
- Coba akses URL `/admin/users` secara manual melalui browser, pastikan muncul pesan "Akses Ditolak".
