Tentu! Berikut adalah dokumentasi fitur autentikasi secara lengkap dalam format DokuWiki, termasuk struktur dan detail setiap bagian:
```markdown ## Fitur Autentikasi
### 1. Pengantar
Fitur autentikasi aplikasi billing ini dirancang untuk mengelola akses pengguna dengan berbagai peran (admin, customer, operator, teknisi). Fitur ini mencakup proses login, logout, dan kontrol akses berdasarkan peran.
### 2. Konfigurasi Awal
#### 2.1. Konfigurasi Database
Pastikan tabel `users` telah dibuat di database dengan struktur berikut:
```sql CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(100) NOT NULL, password VARCHAR(255) NOT NULL, email VARCHAR(100) NOT NULL, role ENUM('admin', 'customer', 'operator', 'teknisi') NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
); ```
#### 2.2. Instalasi CodeIgniter 3
1. Unduh dan instal CodeIgniter 3 dari situs resmi CodeIgniter. 2. Konfigurasi database di file `application/config/database.php`.
### 3. Model
#### 3.1. Model `User_model`
Lokasi: `application/models/User_model.php`
```php <?php class User_model extends CI_Model {
public function __construct() { $this->load->database(); }
public function get_user_by_username($username) { $query = $this->db->get_where('users', array('username' => $username)); return $query->row_array(); }
public function create_user($data) { return $this->db->insert('users', $data); }
} ```
#### 3.2. Model `Auth_model`
Lokasi: `application/models/Auth_model.php`
```php <?php class Auth_model extends CI_Model {
public function __construct() { $this->load->database(); }
public function check_login($username, $password) { $this->db->where('username', $username); $this->db->where('password', md5($password)); // Ganti dengan hashing yang lebih aman di produksi $query = $this->db->get('users'); return $query->row_array(); }
} ```
### 4. Controller
#### 4.1. Controller `Auth`
Lokasi: `application/controllers/Auth.php`
```php <?php class Auth extends CI_Controller {
public function __construct() { parent::__construct(); $this->load->model('Auth_model'); $this->load->library('session'); }
public function login() { $this->load->view('login'); }
public function login_process() { $username = $this->input->post('username'); $password = $this->input->post('password'); $user = $this->Auth_model->check_login($username, $password);
if ($user) { $this->session->set_userdata('user_id', $user['id']); $this->session->set_userdata('role', $user['role']); redirect('dashboard'); } else { $this->session->set_flashdata('error', 'Invalid Username or Password'); redirect('auth/login'); } }
public function logout() { $this->session->sess_destroy(); redirect('auth/login'); }
} ```
### 5. View
#### 5.1. View `login.php`
Lokasi: `application/views/login.php`
```html <!DOCTYPE html> <html> <head>
<title>Login</title>
</head> <body>
<h1>Login</h1> <?php if ($this->session->flashdata('error')): ?> <p style="color: red;"><?php echo $this->session->flashdata('error'); ?></p> <?php endif; ?> <form action="<?php echo site_url('auth/login_process'); ?>" method="post"> <label for="username">Username:</label> <input type="text" name="username" id="username" required> <br> <label for="password">Password:</label> <input type="password" name="password" id="password" required> <br> <input type="submit" value="Login"> </form>
</body> </html> ```
### 6. Middleware (Opsional)
#### 6.1. Custom Controller Base
Lokasi: `application/core/MY_Controller.php`
```php <?php class MY_Controller extends CI_Controller {
public function __construct() { parent::__construct(); $this->check_login(); }
private function check_login() { if (!$this->session->userdata('user_id')) { redirect('auth/login'); } }
} ```
- Extend controller Anda dari `MY_Controller` untuk menerapkan proteksi login.
### 7. Pengujian
#### 7.1. Uji Fitur Login
- Cobalah login dengan berbagai kombinasi username dan password. - Pastikan pengguna diarahkan ke halaman yang tepat berdasarkan role mereka setelah login.
#### 7.2. Uji Fitur Logout
- Pastikan sesi dihapus dan pengguna diarahkan ke halaman login setelah logout.
#### 7.3. Uji Kontrol Akses
- Verifikasi bahwa akses ke halaman dan fitur dibatasi berdasarkan role pengguna.
### 8. Keamanan
#### 8.1. Hashing Password
- Gantilah penggunaan `md5` dengan hashing yang lebih aman, seperti `bcrypt` atau `argon2`.
#### 8.2. Validasi Input
- Pastikan semua input pengguna divalidasi dan disanitasi untuk menghindari serangan.
```
Cara menambahkan dokumentasi ini ke DokuWiki:
1. Masuk ke DokuWiki:
2. Buat atau Edit Halaman:
3. Salin dan Tempel Konten:
4. Simpan Halaman:
Dengan format ini, Anda akan memiliki dokumentasi yang jelas dan terstruktur di DokuWiki mengenai fitur autentikasi untuk aplikasi billing Anda.