Selamat pagi guys. Bertemu dengan saya kembali..hehehehe
Kembali lagi saya akan memberikan tutorial Yii2. Kali ini tentang ACF (Acess Control Filter) Yii2 dan cara implementasi sederhana di aplikasi Yii2.
Sebelum melakukan implementasi alangkah baiknya kita berkenalan dulu dengan ACF Yii2.
Access Control Filter (ACF) adalah metode autorisasi sederhana yang bagus digunakan pada aplikasi Yii2 yang hanya membutuhkan beberapa access control sederhana. Seperti pada namanya, ACF merupakan sebuah action filter yang dapat diimplementasikan pada controller atau module sebagai behavior. ACF akan mengecek access rules yang kita set apakah user tersebut diperbolehkan untuk mengakses action atau tidak.
Implemntasi umum jika tanpa role dari database :
Kembali lagi saya akan memberikan tutorial Yii2. Kali ini tentang ACF (Acess Control Filter) Yii2 dan cara implementasi sederhana di aplikasi Yii2.
Sebelum melakukan implementasi alangkah baiknya kita berkenalan dulu dengan ACF Yii2.
Access Control Filter (ACF) adalah metode autorisasi sederhana yang bagus digunakan pada aplikasi Yii2 yang hanya membutuhkan beberapa access control sederhana. Seperti pada namanya, ACF merupakan sebuah action filter yang dapat diimplementasikan pada controller atau module sebagai behavior. ACF akan mengecek access rules yang kita set apakah user tersebut diperbolehkan untuk mengakses action atau tidak.
Implemntasi umum jika tanpa role dari database :
use yii\filters\AccessControl;
class SiteController extends Controller{
public function behaviors(){
return [
'access' => [
'class' => AccessControl::className(),
'only' => ['login', 'logout', 'signup'],
'rules' => [
[
'allow' => true,
'actions' => ['login', 'signup'],
'roles' => ['?'],
],
[
'allow' => true,
'actions' => ['logout'],
'roles' => ['@'],
],
],
],
];
}
// ...
}
Kode di atas adalah ACF yang diterapkan pada site controller sebagai behavior. Type ini menggunakan action filter.
Penjelasan :
Nah kalo kita sekarang akan menggunakan role dari table login kemaren untuk memfilter action masing-masing userrole.
Kita menggunakan aplikasi yang kemaren ya teman2. Bagi yang belum tau silahkan klik disini untuk mengetahui tutorial sebelumnya.
Bagi teman2 yang sudah tau, langsung aja teman2 login menggunakan username yang bukan admin tapi mempunyai role selain admin. Jika belum ada silahkan tambahkan user baru dengan role Mahasiswa. Teman2 bisa menggunakan query berikut :
Sekarang tujuan kita adalah memfilter hanya user dengan role Admin yang bisa mengakses seluruh halaman mahasiswa. Langsung saja teman2 buka file MahasiswaController dan rubah function behavior sebagai berikut :
Untuk action-action dibawahnya tidak perlu dirubah.
Sekarang teman2 coba mengakses halaman tadi dengan user yang sama pasti sudah tidak diijinkan mengakses halaman tersebut.
Kemudian temen2 mengakses halaman tersebut dengan menggunakan user yang mempunya role Admin.
Nah bisakan. Sangat mudah teman2 untuk memfilter actions menggunakan ACF. Jadi hanya user yang mempunyai role Admin saja yang bisa mengakses halaman tersebut. Sekian tutorial Access Control Filter Yii2. Semoga bermanfaat buat teman2. Matur suwun dan sampai berjumpa kembali...:D
- Rules ['?'] dimaksudkan semua user bisa mengakses action tersebut tanpa harus melakukan login terlebih dahulu.
- Rules ['@'] dimaksudkan action tersebut hanya bisa diakses oleh semua user yang telah login.
Nah kalo kita sekarang akan menggunakan role dari table login kemaren untuk memfilter action masing-masing userrole.
Kita menggunakan aplikasi yang kemaren ya teman2. Bagi yang belum tau silahkan klik disini untuk mengetahui tutorial sebelumnya.
Bagi teman2 yang sudah tau, langsung aja teman2 login menggunakan username yang bukan admin tapi mempunyai role selain admin. Jika belum ada silahkan tambahkan user baru dengan role Mahasiswa. Teman2 bisa menggunakan query berikut :
insert into login values(Jika sudah, silahkan temen2 login menggunakan user tersebut. Dan dicoba mengakses "localhost/yii2basic/web/index.php?r=mahasiswa". User tersebut masih bisa membuka halaman tersebutkan.
'',
'M3111108',
'bismillah',
'mahasiswa-1234',
'mahasiswa647236283234bfbjed23',
'Mahasiswa'
);
Sekarang tujuan kita adalah memfilter hanya user dengan role Admin yang bisa mengakses seluruh halaman mahasiswa. Langsung saja teman2 buka file MahasiswaController dan rubah function behavior sebagai berikut :
namespace app\controllers;
use Yii;
use app\models\Mahasiswa;
use app\models\MahasiswaSearch;
use yii\web\Controller;
use yii\web\NotFoundHttpException;
use yii\filters\VerbFilter;
use yii\filters\AccessControl;
class MahasiswaController extends Controller
{
public function behaviors()
{
return [
'access'=>[
'class'=>AccessControl::className(),
'rules'=>[
[
'actions'=>[
'index',
'create',
'update',
'delete',
'view'
],
'allow'=>true,
'matchCallback'=>function(){
return (
Yii::$app->user->identity->role=='Admin'
);
}
],
],
],
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'delete' => ['post'],
],
],
];
}
Untuk action-action dibawahnya tidak perlu dirubah.
Sekarang teman2 coba mengakses halaman tadi dengan user yang sama pasti sudah tidak diijinkan mengakses halaman tersebut.
Kemudian temen2 mengakses halaman tersebut dengan menggunakan user yang mempunya role Admin.
Nah bisakan. Sangat mudah teman2 untuk memfilter actions menggunakan ACF. Jadi hanya user yang mempunyai role Admin saja yang bisa mengakses halaman tersebut. Sekian tutorial Access Control Filter Yii2. Semoga bermanfaat buat teman2. Matur suwun dan sampai berjumpa kembali...:D