Beranda · Contact Us · Downloads

Yii: Custom AccessRules Menggunakan Expression Function()

Pada artikel sebelumnya sudah dibahas bagaimana Membuat Custom accessRules menggunakan extends CWebUser. Dimana dalam pengerjaannya begitu kompleks mulai dari membuat UserLevel, WebUser, hingga menentukan class apa yang harus digunakan. 

Kali ini saya akan mencoba membuat custom accessrules sederhana dengan menggunakan function(). Sekenario yang digunakan sama seperti sebelumnya yaitu user level terdiri dari Administrator, Keyuser, dan Enduser.
  • Enduser hanya diperbolehkan melakukan action create
  • Keyuser hanya diperbolehkan melakukan action create dan update
  • Administrator bisa melakukan semuanya termasuk create, update, delete, hingga mengakses halaman admin.
Pastikan Anda sudah mempunyai user model database (klik disini). Kemudian create user dengan level yang berbeda-beda 
+----------+---------------+
| username | level         |
+----------+---------------+
| user1    | enduser       |
| keyuser1 | keyuser       |
| admin1   | administrator |
+----------+---------------+
Pastikan konfigurasi protected/components/UserIdentity.php sudah benar 
        .............
        if (isset($user)){
            if($pass === $user->password){
                $this->_id=$user->id;
                $this->setState('_level', $user->level);
                .............   
Langkah selanjutnya adalah melakukan sedikit perubahan dengan menambahkan function() pada controller model yang akan digunakan.

//protected/controllers/MahasiswaController.php
public function accessRules()
    {
        return array(
            array('allow', 
                'actions'=>array('index','view'),
                'users'=>array('*'),
            ),
            array('allow',
                'actions'=>array('create'),
                'expression'=>function() {
                    return Yii::app()->user->_level=='enduser';

                }
            ),
            array('allow',
                'actions'=>array('create','update'),
                'expression'=>function(){
                    return Yii::app()->user->_level=='keyuser';

                }
            ),
            array('allow',
              'actions'=>array('admin','create','update','delete'),
                'expression'=>function(){
                return Yii::app()->user->_level=='administrator';

                }
            ),
            array('deny',  // deny all users
                'users'=>array('*'),
            ),
        );
    }

Good Luck!

Artikel keren lainnya:

Yii: Membuat Custom accesRules

Acces rules berguna untuk mendefinisikan action apa saja yang bisa dilakukan oleh masing-masing user. Di sini saya akan memberikan contoh kecil membuat custom access rules
Sekenarionya adalah user terdiri dari 3 level yaitu Administrator, Keyuser, dan Enduser, dimana :
  • Enduser hanya diperbolehkan melakukan action create.
  • Keyuser hanya diperbolehkan melakukan action create dan update.
  • Administrator bisa melakukan semua hal yang dilakukan Enduser dan Keyuser termasuk  delete dan mengakses halaman admin.

Artikel keren lainnya:

Yii: Membuat Login dengan Database

Setiap kali membuat aplikasi, sebenarnya Yii sudah menyediakan menu login. Namun terbatas hanya 'admin/admin' atau 'demo/demo'. Bisa saja kita menambahkan username dan password lain, caranya tinggal tambahkan di protected/components/UserIdentity.php

 public function authenticate()
    {
        $users=array(
            // username => password
            'demo'=>'demo',
            'admin'=>'admin',
        );


Akan tetapi hal tersebut sangat berisiko tinggi terhadap keamanan suatu aplikasi.  Maka dari itu untuk mempermudah dan memperkecil risiko tersebut dibuatlah login dengan database. Untuk membuat login dengan database, hal yang harus dipersiapkan adalah aplikasi itu sendiri dan tentunya database.

Saya menggunakan aplikasi Helloword yang sudah terhubung dengan database coba. Siapkan tabel yang akan dijadikan tempat untuk menyimpan username dan password yang akan kita buat nantinya :
FieldTypeNullKeyDefaultExtra
idint(11)NoPRINULLauto
namavarchar(30)No
NULL
usernamevarchar(30)NoUNINULL
passwordvarchar(100)No
NULL
levelenum('administrator','keyuser','enduser')No
NULL
Buatlah operasi CRUD untuk tabel tersebut dan create user :
Saya akan coba menambahkan fungsi hash generator menggunakan sha1 ketika create user untuk password di atas. Caranya buka protected/controllers/UserController.php dan tambahkan di actionCreate dan actionUpdate kode berikut ini :

$model->attributes=$_POST['User'];
            $model->password='Helloword'.sha1($model->password);
            if($model->save())

Simpan dan jalankan create user kembali, perhatikan hasilnya :

Setelah berhasil create user dengan menggunakan hash generator sha1, langkah selanjutnya adalah melakukan sedikit perubahan pada UserIdentity.php. 

public function authenticate(){
$user = User::model()->findByAttributes(array('username'=>$this->username));
$pass = 'Helloword'.sha1($this->password);
        if (isset($user)){
            if($pass === $user->password){
                $this->setState('id', $user->id);

                $this->setState('_level', $user->level);
                $this->errorCode=self::ERROR_NONE;           
            }else{
            $this->errorCode=self::ERROR_PASSWORD_INVALID;
            }
        } else{
         $this->errorCode=self::ERROR_USERNAME_INVALID;
        }
        return !$this->errorCode;
    }   


Simpan dan buka aplikasi Helloword, silahkan login dengan username dan password yang sudah dibuat sebelumnya ketika mencoba create user.

$this->setState('id', $user->id);
$this->setState('_level', $user->level);

Kode di atas menyimpan id beserta level, yang nantinya akan kita gunakan untuk membuat custom accesrules.


Good Luck!


Artikel keren lainnya:

Yii: Membuat Operasi CRUD Sederhana


Apa itu CRUD?

CRUD merupakan kependekan dari Create Read Update Delete. Dimana operasi CRUD ini sering digunakan dalam pemrograman database.

Untuk membuat CRUD persiapkan telebih dahulu database beserta tabelnya yang akan menjadi objek pengoperasian CRUD, dan pastikan konfigurasi modul gii dalam aplikasi yang kita gunakan sudah aktif.

'modules'=>array(
            'gii'=>array(
                  'class'=>'system.gii.GiiModule',
                  'password'=>'Helloword',
                  'ipFilters'=>array('127.0.0.1','::1'),
            ),
      ),

Pertama siapkan terlebih dahulu database dan tabelnya :

mysql> use coba;
Database changed
mysql> desc tbl_mahasiswa;
+--------+--------------+------+-----+---------+----------------+
| Field  | Type         | Null | Key | Default | Extra          |
+--------+--------------+------+-----+---------+----------------+
| nim    | char(10)     | NO   | PRI | NULL    |                |
| nama   | varchar(50)  | NO   |     | NULL    |                |
| alamat | varchar(100) | NO   |     | NULL    |                |
+--------+--------------+------+-----+---------+----------------+


Kemudian buatlah konfigurasi untuk melakukan koneksi ke database mysql,
Buka Webroot/nama_aplikasi/protected/config/main.php
Cari tulisan //database setting are configured in database.php
Jika Anda menemukan tulisan 'db'=>require(dirname(__FILE__).'/database.php'), 
silahkan hapus kode tersebut dan tuliskan kode berikut ini :


'db'=>array(
        'class'=>'CDbConnection',
        'connectionString'=>'mysql:host=127.0.0.1;dbname=coba',
        'username'=>'root',
        'password'=>'',
        'tablePrefix'=>'tbl_',
        'emulatePrepare'=>true,
        ),

Setelah membuat koneksi ke database silahkan buka aplikasi helloword dan pastikan tidak ada error. Kemudian buka modul gii dan masukkan password, ketikkan di browser :





Untuk membuat crud kita harus membuat modelnya terlebih dahulu, klik model generator. masukkan nama tabel, klik preview dan generate.



Lihat gambar di atas, model Mahasiswa berhasil dibuat. Langkah selanjutnya generate crud, klik crud generator. masukkan nama model yang telah dibuat (Mahasiswa), klik preview dan generate.



Sampai di sini kita sudah berhasil membuat operasi CRUD untuk model Mahasiswa.
Untuk mencobanya silahkan login sebagai admin dan masuk ke
http://localhost/Helloword/index.php?r=mahasiswa/

Gambar di atas merupakan tampilan halaman model Mahasiswa, dapat dilihat disamping kanan terdapat operasi create Mahasiswa, dan manage mahasiswa. Silahkan explore dan klik link tersebut untuk mencobanya.


Good Luck!

Artikel keren lainnya: