Dalam suatu aplikasi Web umumnya diperlukan pembedaan tingkatan pada user. Misalnya yang paling sederhana adalah pengunjung website yang biasa dan pengguna yang sedang login. Terkadang user yang login pun memiliki beberapa tingkatannya lagi. Nah, setiap tingkatan pengguna memiliki hak akses yang berbeda dengan tingkatan pengguna lain. Di dalam dunia pemograman, ini yang disebut sebagai autorisasi.
Dulu ketika awal belajar pemograman PHP, bagi penulis autorisasi merupakan momok mengerikan. Bayangkan, di setiap halaman harus dipasang validasi apakah user tersebut login, apakah level user tersebut berada di tingkat ini, apakah usernya di tingkat itu. Untungnya saat ini sudah tidak melakukan hal ini lagi.
Yii memiliki dua cara untuk mengatur autorisasi. Yang pertama adalah dengan menggunakan Access Control Filter dan yang satu lagi dengan menggunakan Role-Based Access Control. Dalam artikel kali ini penulis akan memaparkan bagaimana memanfaatkan Access Control Filter yang dimiliki Yii untuk autorisasi.
Access control filter umumnya diimplementasikan apabila skenario autorisasi cukup sederhana. Dikarenakan hak akses pada dasarnya menyangkut apakah user ini boleh mengakses controller ini, apakah user itu boleh mengakses controller itu, makanya access control filter ditulis di kelas controller.
Daftar aturan tertera di bagian method accessRules(), oleh karena itu kita bisa memperhatikan code accessRule(). Apabila Anda menggunakan Gii untuk membuat CRUD, maka dipastikan controller Anda sudah ada method accessRules(). Berikut merupakan contoh isi accessRules():
public function accessRules() { return array( //aturan pertama array('allow', 'actions'=>array('index','view'), 'users'=>array('*'), ), //aturan kedua array('allow', 'actions'=>array('create','update'), 'users'=>array('@'), ), //aturan ketiga array('allow', 'actions'=>array('admin','delete'), 'users'=>array('budi'), ), //aturan keempat array('deny', 'users'=>array('*'), ), } }
Contoh di atas, merupakan tipikal hasil dari Gii. Sistem ini berbasis “allow” alias mengizinkan karena menulis siapa yang boleh mengakses. Aturan pertama menjelaskan semua orang boleh menjalankan actionIndex() dan actionView(). Tetapi hanya orang yang login yang boleh membuka actionCreate() dan actionUpdate(). Aturan ketiga maksudnya hanya username “budi” yang bisa membuka actionAdmin() dan actionDelete(). Dan yang keempat dipasang untuk mencegah orang membuka action yang belum ditulis di aturan 1,2 dan 3.
Perlu diingat bahwa daftar aturan di dalam accessRule() dibaca dari atas sampai ke bawah artinya kalau aturan pertama di atas sudah memenuhi syarat, maka sistem tidak akan melanjutkannya ke bawah lagi. Artinya apabila terdapat aturan demikian:
.... array('deny', 'actions'=>'create', 'users'=>'dani', ), array('allow', 'actions'=>'create', 'users'=>'dani', ), ....
Jika Dani mencoba menjalankan actionCreate() sudah dipastikan tidak bisa. Karena aturan yang paling awal dilihat Yii adalah ‘deny’.
Di dalam setiap array terdapat beberapa parameter yang bisa diset:
- action adalah nama action pada controller bersangkutan.
- user adalah user siapa saja yang boleh akses, kita boleh langsung tulis username user (username yang dipakai ketika login). Selain nama juga bisa berupa simbol yang terdiri dari:
* : semua jenis user, baik yang tidak login(guest) maupun yang sudah login(authenticated user).
? : hanya user yang tidak login
@ : hanya user yang sudah login - expression, memungkinkan kita memasukkan coding PHP. Lebih jelasnya akan dipaparkan nanti.
Karena bisa memasukkan coding PHP, parameter “expression” memungkinkan kita mengatur skenario yang lebih spesial misalnya user yang memiliki state “special” yang akses. Maka kita tulis:
array('allow', 'actions'=>array('create'), 'expression'=>array('$user->special==1'), ),
Sebetulnya menulis $user->special sama saja dengan menulis Yii::app()->user->getState(‘special’).
Satu hal penting yang harus diingat adalah jika tidak ada satu aturan pun yang memenuhi syarat, maka action akan dijalankan. Oleh karenanya selalu memasukkan aturan
array('deny', 'users'=>array('*'), ),
Demikian penjelasan singkat mengenai penggunaan access control di dalam Yii.
Terima kasih mas, artikelnya bagus dan mudah dipahami
kalau boleh saran disitus ini ditambahkan rss supaya pengunjung setia (seperti saya) mantau update artikel terbaru lebih mudah
Terima kasih atas pujian dan sarannya.
Sebenarnya kami ada sediakan RSS kok pas di bagian Footer.
Ini alamat RSS kami http://feeds.feedburner.com/Computesta
Sepertinya RSS kami kurang kelihatan yah?
wah membantu banget, cari cari tutorial yii masih belum ada penjelasan lebih lengkap pakai bahasa seperti ini.