Dalam melakukan develop sistem kita tentunya tidak asing dengan pengaturan hak akses untuk tingkatan user yang berbeda. Misalnya, user non-login tidak bisa mengakses halaman yang dikhususkan untuk user yang login. Halaman yang dilihat user tanpa login akan berbeda dengan yang dilihat user yang sedang login.
Yii menyediakan sebuah fitur yang disebutkan sebagai Role Base Access Control yang bertujuan untuk mengatur hak akses ini sehingga developer tidak perlu capek-capek melakukan validasi di setiap halaman. Walaupun Role Base Access Control ini sangat membantu, tetapi untuk setup hak akses user di dalam Yii Framework developer jika dengan menulis code, bukanlah perkara gampang. Menulis code secara manual biasanya cenderung panjang dan melelahkan. Anda bisa melihat contoh secuil koding setup RBAC di bawah ini yang diambil dari panduan resmi Yii untuk men-setup hak akses:
$auth=Yii::app()->authManager; $auth->createOperation('createPost','create a post'); $auth->createOperation('readPost','read a post'); $auth->createOperation('updatePost','update a post'); $auth->createOperation('deletePost','delete a post'); $bizRule='return Yii::app()->user->id==$params["post"]->authID;'; $task=$auth->createTask('updateOwnPost','update a post by author himself',$bizRule); $task->addChild('updatePost'); $role=$auth->createRole('reader'); $role->addChild('readPost'); $role=$auth->createRole('author'); $role->addChild('reader'); $role->addChild('createPost'); $role->addChild('updateOwnPost'); $role=$auth->createRole('editor'); $role->addChild('reader'); $role->addChild('updatePost'); $role=$auth->createRole('admin'); $role->addChild('editor'); $role->addChild('author'); $role->addChild('deletePost'); $auth->assign('reader','readerA'); $auth->assign('author','authorB'); $auth->assign('editor','editorC'); $auth->assign('admin','adminD');
Code di atas hanya perlu dijalankan sekali. Biasanya orang akan meletakkan di sebuah halaman khusus yang hanya diketahui Admin. Programmer harus menentukan user role apa bisa mengakses halaman apa. Semakin banyak halaman maka semakin banyak code yang harus ditulis. Penulis berharap kalian mendapatkan poinnya. Dikarenakan ribet, biasanya disarankan untuk menggunakan program administratif supaya proses development lebih cepat.
Oleh karena itu penulis ingin memperkenalkan salah satu extension Yii yang dikenal dengan nama Rights. Extension ini dibuat oleh Christoffer Niska untuk membantu developer untuk mengatur hak akses user dalam sebuah aplikasi Web berbasis Yii. Rights mampu meng-autogenerate halaman-halaman yang sudah ada, sehingga programmer tidak perlu tulis satu per satu halaman untuk mengatur hak aksesnya. Dan lebih enaknya lagi, semuanya dilakukan dengan gampang dan intuitif karena user interface-nya yang bagus dan sederhana. Rights sampai saat artikel ini diturunkan sudah mencapai 1.3.0 dan merupakan salah satu ekstensi yang paling sering di-download di Web Yii.
Berikut merupakan langkah-langkah untuk mengimplementasikan Rights ke dalam projek aplikasi Yii Anda:
1. Pertama-tama kita download Rights versi terbaru di http://www.yiiframework.com/extension/rights/
2. Ekstrak zipnya dan copy folder “rights” ke dalam /protected/modules. Jika folder “modules” tidak ada, maka buatkan secara manual.
3. Buka file protected/config/main.php kemudian tambahkan code di bagian import:
'application.modules.rights.*', // untuk rights 'application.modules.rights.components.*', //untuk rights
Dilanjutkan bagian modules:
'rights'=>array( 'install'=>true, //hapus setelah diinstall 'userClass'=>'User', //harus sesuai nama kelas model User yang login 'userNameColumn' =>'username',//nama field username 'userIdColumn'=>'id', //nama field primary key-nya ),
Dan bagian components,
'users'=>array( 'class'=>'RWebUser', ... ), 'authManager'=>array( 'class'=>'RDbAuthManager', ),
4. Setelah itu buka /components/Controller.php ganti code menjadi:
class Controller extends RController
5. Pada semua controller ubah isi filters() menjadi:
public function filters() { return array( 'Rights', // perform access control for CRUD operations ); }
6. Pastikan di class UserIdentity, sudah meng-override getId(). Jika kurang paham bagaimana meng-override, bisa melihat contoh di wiki ini.
7. Pastikan sudah login sebagai superadmin. Jika aplikasi Anda masih belum membuat sistem login yang sebenarnya (secara default, Yii hanya memberikan sistem login dengan data yang diambil dari array), maka sekarang saatnya menulis code tersebut sebelum melanjutkan ke tahap berikutnya.
8. Buka halaman Rights dengan mengakses http://project-and/index.php?r=rights
9. Rights akan terbuka normal dan menampilkan interfacenya. Sekarang kembali ke /protected/config/main.php untuk menghapus atribut “install” pada Rights
'rights'=>array( //'install'=>true, //hapus saja... 'userClass'=>'User', //harus sesuai nama kelas model User yang login 'userNameColumn' =>'username',//nama field username 'userIdColumn'=>'id', //nama field primary key-nya ),
9. Tambahkan role dengan buka tab “Roles”. Jangan lupa tambahkan satu peran khusus untuk tamu(guest).
10. Di bagian /config/main.php tambahkan di authManager:
'authManager'=>array( 'defaultRoles'=>array('guest'), //sesuai nama tipe guest yang di-create ),
Apabila dalam proses instalsi Rights mengalami masalah, maka silahkan cek di wiki bagaimana troubleshoot Rights yang ditulis oleh penulis juga.
browsing inet ttng Yii, akhirnya nyasar dimari.
btw mau nanya nih tentang Yii khususnya checkaccess, kenapa ya selalu error 403
masalah detil disini http://www.yiiframework.com/forum/index.php/topic/10556-extension-rights/page__view__findpost__p__141766 cc: http://www.yiiframework.com/forum/index.php/topic/29377-askerror403-checkaccess-yii-rights/page__view__findpost__p__141464
Saya belum test sendiri. Tetapi menilik code Anda… seharusnya Anda harus menulis :
if(Yii::app()->user->checkAccess(‘Profile.ChangePassword’, $params))
Karena saya melihat kamu sudah membuat variable $params, jadi tidak perlu lagi tulis array di checkAccess().
kenapa ya,setelah login muncul error 403.mohon pencerahannya..maklum newbie
Biasanya penyebab 403 cukup banyak. Untuk mencari tahu , bro Santo bisa mengecek setting Rights sudah ok atau belum di sini:
http://www.yiiframework.com/wiki/296/troubleshooting-rights-extension
baca bagian “Things need to check”
Bisa minta contoh source codenya gan?
Untuk contoh source bisa coba lihat coding ini saja Gan: http://www.yiiframework.com/extension/rights/files/yii-blog-with-rights-1.3.0.r147.zip.
Ini adalah source code Yii blog beserta implementasi Rights…
Kenapa saya intall dapat error ini ya.
Alias “rights.RightsModule” is invalid. Make sure it points to an existing PHP file and the file is readable.
Error :
throw new CException(Yii::t(‘yii’,'Alias “{alias}” is invalid. Make sure it points to an existing PHP file and the file is readable.’,array(‘{alias}’=>$alias)));
Yang harus diperiksa:
1. apakah penulisan nama folder “rights” sudah benar? Apakah nama foldernya huruf kecil semuanya?
2. Apakah folder “rights” betul-betul sudah ada di dalam folder “modules” di webroot? Folder “modules” ini harus dibuat, karena Yii dari sononya tidak buatin.
3. apakah di config/main.php sudah ada coding
‘import’=>array(
….
‘application.modules.rights.*’, // untuk rights
‘application.modules.rights.components.*’, //untuk rights
….
),
saya sudah mengikuti semua seperti toturial diatas. Masalah error itu sudah tidak keluar. tatapi kenapa ya bila saya buka http://localhost/belajaryii/index.php pagenya tidak keluar.
hanya keluar ” The page isn’t redirecting properly “
Itu menandakan Rights sudah berfungsi. Masalah itu terjadi karena Rights menganggap halaman Index tidak boleh diakses guest, maka dia redirect ke halaman Login. Ternyata halaman Login tidak boleh diakses Guest juga, maka dia redirect ke Login, dst. (itulah penyebab redirect not properly)
Jadi solusi untuk ini adalah, kita secara spesifik mengatakan halaman site/index dan site/login itu boleh diakses siapa saja.
coba di bawah filter() di protected/controllers/SiteController.php ditambah coding allowedActions() seperti begini:
public function filters()
{
return array(
‘Rights’, // perform access control for CRUD operations
);
}
public function allowedActions()
{
return ‘index, login’;
}
Selepas saya masukkan koding allowedActions ini :
public function allowedActions()
{
return ‘index, login, logout, contact, page’;
}
Saya telah dapat buka web saya. Terima Kasih diatas tunjuk ajar yang sangat dihargai. dan sangat membantu.
Cuma ada 1 lagi masalah saya apa bila saya nak buka rights tak dapat. bila saya taip : localhost/belajaryii/index.php?r=rights
Keluar Error seperti ini :
CHttpException
You are not authorized to perform this action. (C:\xampp\htdocs\belajaryii\protected\modules\rights\components\RController.php:62)
#0 C:\xampp\htdocs\belajaryii\protected\modules\rights\components\RightsFilter.php(57): RController->accessDenied()
#1 C:\xampp\yii\framework\web\filters\CFilter.php(38): RightsFilter->preFilter(Object(CFilterChain))
#2 C:\xampp\htdocs\belajaryii\protected\modules\rights\components\RController.php(36): CFilter->filter(Object(CFilterChain))
#3 C:\xampp\yii\framework\web\filters\CInlineFilter.php(58): RController->filterRights(Object(CFilterChain))
#4 C:\xampp\yii\framework\web\filters\CFilterChain.php(130): CInlineFilter->filter(Object(CFilterChain))
#5 C:\xampp\yii\framework\web\CController.php(291): CFilterChain->run()
#6 C:\xampp\yii\framework\web\CController.php(265): CController->runActionWithFilters(Object(CInlineAction), Array)
#7 C:\xampp\yii\framework\web\CWebApplication.php(282): CController->run(‘error’)
#8 C:\xampp\yii\framework\base\CErrorHandler.php(331): CWebApplication->runController(‘site/error’)
#9 C:\xampp\yii\framework\base\CErrorHandler.php(204): CErrorHandler->render(‘error’, Array)
#10 C:\xampp\yii\framework\base\CErrorHandler.php(129): CErrorHandler->handleException(Object(CHttpException))
#11 C:\xampp\yii\framework\base\CApplication.php(732): CErrorHandler->handle(Object(CExceptionEvent))
#12 [internal function]: CApplication->handleException(Object(CHttpException))
#13 {main}
Kenapa dia jadi macam ni ye?
Ini disebabkan kamu belum punya Administrator. Pastikan harus login sebagai Administrator untuk mengakses localhost/belajaryii/index.php?r=rights
Jika sudah admin, tapi tetap begitu, itu artinya harus di set di Rights supaya dia mengenali Admin. Ini harus tergantung pada table User kamu. Misalnya nama field username-nya apa. Value username-nya apa kalau dia Admin.
By default, Right mencari tabel User, dengan field “username” dan harus bernama “Admin”. Hanya user itu yang dia anggap sebagai admin yang berhak akses: localhost/belajaryii/index.php?r=rights
Berikut adalah database user saya:
– Table structure for table `user`
CREATE TABLE IF NOT EXISTS `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(128) NOT NULL,
`password` varchar(128) NOT NULL,
`email` varchar(128) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
– Dumping data for table `user`
INSERT INTO `user` (`id`, `username`, `password`, `email`) VALUES
(1, ‘Admin’, ‘admin’, ‘[email protected]’),
(2, ‘zul’, ‘zul’, ‘[email protected]’);
Saya telah masukkan Admin pada username pertama. tetapi masih lagi error yang sama. kenapa ya? adakah table user ‘U’ dihadapannya perlu huruf besar?
Hm, menurut saya tidak usah ganti nama table. Table seharusnya sudah benar. Kalau boleh tahu, apakah yang ditampilkan di layar jika di coding ditulis
echo Yii::app()->user->id
(Coding boleh ditulis di SiteController bagian index())
Terima Kasih suadara sangat membantu, Masalah saya itu telah dapat diselesaikan dengan menambah echo Yii::app()->user->id
Tqvm.
ini diletakkan dimana mas?
mas step by stepnya gimana ya…
saya masih bingung….
tolong penjelasanya…
makasih..!!!!
ini maksudnya apa mas?
CDbException
CDbCommand failed to execute the SQL statement: SQLSTATE[42S02]: Base table or view not found: 1146 Table ‘grup_merapi.authassignment’ doesn’t exist. The SQL statement executed was: SELECT *
FROM `AuthAssignment`
WHERE userid=:userid
Katanya table “authassigment” belum ada. Ada kemungkinkan kamu belum install Rights. Apakah sudah mengikuti langkah-langkah di atas semuanya?
apakah sudah set seperti ini dulu:
‘rights’=>array(
‘install’=>true,
‘userClass’=>’User’,
‘userNameColumn’ =>’username’,
‘userIdColumn’=>’id’,
),
dibuka dulu Rights-nya : localhost/xxx/?r=rights
master hafid bisa bantu ga caranya buat postingan tapi tiap postingan bisa diedit sama user yang buat postingan itu sendiri… apa pake EXtension tertentu apa emang masalahnya di database
master bisa bantu ga caranya buat postingan tapi tiap postingan bisa diedit sama user yang buat postingan itu sendiri… apa pake EXtension tertentu apa emang masalahnya di database
master, itu yang point 6 mksudnya gimana? ane ga pham. buka linknya tp bahasa inggris. mohon penceRAHANNTA