RBAC merupakan fitur penting yang perlu ada di aplikasi yang kita buat, karena digunakan untuk mengatur akses yang mana yang boleh dilihat oleh role tertentu.
1. Siapkan tabel-tabel yang dibutuhkan yaitu tabel auth_assignment, auth_item, auth_item_child, dan auth_rule, file sql nya seperti ini :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
drop table if exists `auth_assignment`; drop table if exists `auth_item_child`; drop table if exists `auth_item`; drop table if exists `auth_rule`; create table `auth_rule` ( `name` varchar(64) not null, `data` text, `created_at` integer, `updated_at` integer, primary key (`name`) ) engine InnoDB; create table `auth_item` ( `name` varchar(64) not null, `type` integer not null, `description` text, `rule_name` varchar(64), `data` text, `created_at` integer, `updated_at` integer, primary key (`name`), foreign key (`rule_name`) references `auth_rule` (`name`) on delete set null on update cascade, key `type` (`type`) ) engine InnoDB; create table `auth_item_child` ( `parent` varchar(64) not null, `child` varchar(64) not null, primary key (`parent`, `child`), foreign key (`parent`) references `auth_item` (`name`) on delete cascade on update cascade, foreign key (`child`) references `auth_item` (`name`) on delete cascade on update cascade ) engine InnoDB; create table `auth_assignment` ( `item_name` varchar(64) not null, `user_id` varchar(64) not null, `created_at` integer, primary key (`item_name`, `user_id`), foreign key (`item_name`) references `auth_item` (`name`) on delete cascade on update cascade ) engine InnoDB; |
2. Misalnya kita ingin memberikan rule kepada user untuk membuat branch. Tambahkan ke tabel auth_item :
3. Selanjutnya, kita memberikan role dari auth_item yang baru saja dibuat ke user tertentu. Hal ini dilakukan dari tabel auth_assignment. Item_name yang ada di tabel auth_assignment adalah name yang berasal dari tabel auth_item yang baru saja kita buat. Kolom lainnya adalah user_id dari tabel user.
Ini artinya user_id nomer 2 punya akses untuk menambah branch.
4. Tabel auth_item_child memiliki kolom parent dan child. Tabel ini digunakan untuk membuat hirarki rule apa saja yang boleh beserta turunannya. Misalnya kita punya auth_item ‘admin’ yang bisa melakukan semua role. Masukkan ‘admin’ pada kolom ‘parent’, dan child ‘tambah-branch’ dan seterusnya.
Sehingga selanjutnya pada tabel auth_assignment kita bisa memberikan akses ‘admin’ pada user tertentu.
5. Modifikasi file main.php untuk menambahkan auth-manager :
1 2 3 4 5 |
'authManager'=> [ 'class'=>'yii\rbac\DbManager', 'defaultRoles'=>['guest'], ], |
6. Modifikasi BranchesController.php pada actionCreate untuk menambahkan rule tambah-branch yang sudah kita tulis di database. Apabila tidak punya otorisasi, maka akan timbul pesan error :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
use yii\web\ForbiddenHttpException; public function actionCreate() { if(Yii::$app->user->can('tambah-branch')) { $model = new Branches(); if ($model->load(Yii::$app->request->post())) { $model->branch_created_date = date('Y-m-d h:m:s'); $model->save(); return $this->redirect(['view', 'id' => $model->branch_id]); } else { return $this->render('create', [ 'model' => $model, ]); } }else { throw new ForbiddenHttpException; } } |
Akan muncul pesan error apabila kita login dengan user yang tidak memiliki permission untuk menambah branch.
Tutorial ini sebagai dokumentasi dan pembelajaran pribadi sekalian belajar terjemahin bahasa Inggris, dan siapa tahu bermanfaat buat orang lain. Sumber lengkapnya diambil dari Youtube DoingITEasy Channel.
1 thought on “Tutorial Yii2 Bagian 18-19 : Role-Based Access Control (RBAC)”