Logo
images

Membuat Simple Otorisasi User

Dalam pembuatan website dinamis, fungsi otorisasi user mutlak diperlukan. User yang diberi hak akses untuk menambah, mengedit dan menghapus konten website adalah user yang berhasil login. Pembuatan otorisasi user di CakePHP framework sangat mudah karena sudah disediakan komponen Auth.

Artikel ini akan menjelaskan pembuatan otorisasi sederhana dengan konsep berikut :
1. Otorisasi tidak memakai tabel, sehingga username dan password langsung ditulis (hardcode) di script.
2. Pengunjung yang tidak login hanya bisa mengakses halaman index dan halaman view.
3. Pengunjung yang login bisa mengakses seluruh halaman, termasuk halaman add, edit, dan delete.

PERSIAPAN

Siapkan database, misalkan buat database dengan nama simple_auths

CREATE  TABLE `simple_auths`.`news` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `title` VARCHAR(255) NULL ,
  `text` TEXT NULL ,
  `created` DATETIME NULL ,
  `modified` VARCHAR(45) NULL ,
  PRIMARY KEY (`id`) ,
  UNIQUE INDEX `title_UNIQUE` (`title` ASC) ,
  FULLTEXT INDEX `text_FULLTEXT` (`text` ASC) );

Kemudian buat aplikasi simple_auths dan modul news (tabel di atas) dengan perintah bake. Aplikasi yang dibuat ini, seluruh modul-nya bisa diakses oleh siapapun.

KOMPONEN AUTH

Untuk membuat suatu akses priviledges, tambahkan komponen Auth. Edit file APP/Controller/AppController.php, dan diisi dengan kode berikut:

Auth->allow(array('index','view'));
        parent::beforeFilter();
    }
}

Dampak dari kode di atas adalah, modul yang bebas diakses oleh pengunjung hanya halaman index dan view saja. halaman Add, Edit dan delete membutuhkan login user untuk mengaksesnya. Misalnya, halaman http://localhost/simple_auths/news bisa diakses, namun jika hendak mengakses halaman http://localhost/simple_auths/news/add akan diarahkan ke halaman login.

Halaman login ini belum dibuat. Buatlah file App/Controller/UsersController.php dengan isi sebagai berikut :

request->is('post')){
            if ($this->request->data['User']['username']=='administrator' and $this->request->data['User']['password']=='12345678') {
                $user=array('id'=>1, 'name'=>'Administrator');
                $this->Session->write('Auth.User', $user);
                $this->redirect('/news');
            }
        }        
    }

    public function logout(){
        $this->Session->delete('Auth.User');
        $this->redirect('/news');
    }
}

Fungsi login pada kode di atas memvalidasi user yang bisa masuk hanyalah administrator dengan password 12345678.

Kemudian kita buat file APP/View/Users/login.ctp dengan isi sebagai berikut :

Form->create('User');?>
Form->input('username');?>
Form->input('password');?>
Form->end('Login');?>

Kemudian kita buat model User yang tidak mempunyai table. Buat file APP/Model/User.php dengan isi sebagai berikut :

Setelah kode di atas dibuat, user yang berhasil login akan mempunyai hak akses penuh, termasuk fitur add, edit dan delete. Untuk logout silahkan masuk ke url http://localhost/simple_auths/users/logout

Otorisasi user ini masih sangat sederhana, namun cukup efektif untuk website atau aplikasi sederhana. Beberapa yang perlu dikembangkan antara lain perbaikan penulisan password pada fungsi login yang belum dienkripsi agar lebih aman. Metode default enkripsi yang dilakukan CakePHP adalah melalui enkripsi sha1() dan penambahan security salt.

Untuk mengetahui string "12345678" setelah dienkripsi, di file APP/Controller/AppController.php di dalam fungsi beforeFilter(); tambahkan perintah echo Security::hash('12345678', null, true); exit;

Setelah itu refresh browser, maka tampaklah enkripsi dari string "12345678" (password yang digunakan). Pada komputer lokal saya, hasil enkripsi adalah "e4604b28245872417e543cd072fcc5e93da4e9d4". Di komputer Anda tentu hasilnya berbeda tergantung dari nilai security salt masing-masing (nilai security salt ada di file APP/Config/core.php baris 186).

Jika sudah menemukan hasil enkripsi password, ubah fungsi login pada file APP/Controller/UsersController.php, ganti kode
if ($this->request->data['User']['username']=='administrator' and $this->request->data['User']['password']=='12345678') {
menjadi :
if ($this->request->data['User']['username']=='administrator' and Security::hash($this->request->data['User']['password'], null, true)=='e4604b28245872417e543cd072fcc5e93da4e9d4') {

Sekarang hapus kembali perintah echo Security::hash('12345678', null, true); exit; di file APP/Controller/AppController.php fungsi beforeFilter(), dan coba untuk login kembali.



Dipost Oleh Super Administrator

No matter how exciting or significant a person's life is, a poorly written biography will make it seem like a snore. On the other hand, a good biographer can draw insight from an ordinary life-because they recognize that even the most exciting life is an ordinary life! After all, a biography isn't supposed to be a collection of facts assembled in chronological order; it's the biographer's interpretation of how that life was different and important.