Tutorial Belajar Pemrograman, membuat game, membuat aplikasi, membuat program, android, game maker, yii, php, CSS, HTML, java, javascript, codeigniter, jquery, Pascal, c++

Friday, December 27, 2013

Membuat Otorisasi Halaman Pada Yii Framework - Pada kali ini kita kan mempelajari bagaimana memfilter user untuk mengakses halaman yang sesuai dengan level otorisasi nya apakah sebagai admin atau user biasa. Kita akan menggunakan tabel user yang sudah kita buat pada arikel sebelumnya yaitu Membuat Simple Login, dimana dalam tabel tersebut kita sudah memberikan level pada masing - masing user. sebagai contoh user yang mempunyai level 1 kita sebut dengan super_admin dan user yang mempunyai level 2 adalah admin. 

Pada artikel sebelumnya Membuat CRUD kita sudah membuat StudentController.php yang di dalamnya terdapat action index, create, update, delete, admin, view. Kita akan setting agar yang dapat mengakses halaman delete dan update hanya super_admin dengan cara :

1. Controller

Buka file StudentController.php anda yang terdapat dalam direktori Protected\controller ubah script pada fungsi accesRules menjadi seperti ini :

public function accessRules(){
   $model= new  User;
   $level = $model->findByAttributes(array('level'=>1));
      return array(
array('allow',  //semua user dapat mengakses halaman 'index' dan 'view'
'actions'=>array('index','view'),
'users'=>array('*'),
),
array('allow', //hanya user authenticated dapat akses 'create' dan 'update'
'actions'=>array('admin','create'),
'users'=>array('@'),
),
array('allow', //hanya admin lvl 1 yang dapat akses 'admin' dan 'delete'
'actions'=>array('update','delete'),
'users'=>array($level->username),
),
array('deny',  // tolak semua user
'users'=>array('*'),
),
      );
}

Maka sekarang script StudentsController anda selengkapnya adalah :

<?php

class StudentsController extends Controller
{
 /**
  * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
  * using two-column layout. See 'protected/views/layouts/column2.php'.
  */
 public $layout='//layouts/column2';

 /**
  * @return array action filters
  */
 public function filters()
 {
  return array(
   'accessControl', // perform access control for CRUD operations
   'postOnly + delete', // we only allow deletion via POST request
  );
 }

 /**
  * Specifies the access control rules.
  * This method is used by the 'accessControl' filter.
  * @return array access control rules
  */
 public function accessRules(){
            $model= new  User;
            $level = $model->findByAttributes(array('level'=>1));
  return array(
   array('allow',  // allow all users to perform 'index' and 'view' actions
    'actions'=>array('index','view'),
    'users'=>array('*'),
   ),
   array('allow', // allow authenticated user to perform 'create' and 'update' actions
    'actions'=>array('admin','create'),
    'users'=>array('@'),
   ),
   array('allow', // allow admin user to perform 'admin' and 'delete' actions
    'actions'=>array('update','delete'),
    'users'=>array($level->username),
   ),
   array('deny',  // deny all users
    'users'=>array('*'),
   ),
  );
 }

 /**
  * Displays a particular model.
  * @param integer $id the ID of the model to be displayed
  */
 public function actionView($id)
 {
  $this->render('view',array(
   'model'=>$this->loadModel($id),
  ));
 }

 /**
  * Creates a new model.
  * If creation is successful, the browser will be redirected to the 'view' page.
  */
 public function actionCreate()
 {
  $model=new Students;

  // Uncomment the following line if AJAX validation is needed
  // $this->performAjaxValidation($model);

  if(isset($_POST['Students']))
  {
   $model->attributes=$_POST['Students'];
   if($model->save())
    $this->redirect(array('view','id'=>$model->id));
  }

  $this->render('create',array(
   'model'=>$model,
  ));
 }

 /**
  * Updates a particular model.
  * If update is successful, the browser will be redirected to the 'view' page.
  * @param integer $id the ID of the model to be updated
  */
 public function actionUpdate($id)
 {
  $model=$this->loadModel($id);

  // Uncomment the following line if AJAX validation is needed
  // $this->performAjaxValidation($model);

  if(isset($_POST['Students']))
  {
   $model->attributes=$_POST['Students'];
   if($model->save())
    $this->redirect(array('view','id'=>$model->id));
  }

  $this->render('update',array(
   'model'=>$model,
  ));
 }

 /**
  * Deletes a particular model.
  * If deletion is successful, the browser will be redirected to the 'admin' page.
  * @param integer $id the ID of the model to be deleted
  */
 public function actionDelete($id)
 {
  $this->loadModel($id)->delete();

  // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
  if(!isset($_GET['ajax']))
   $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
 }

 /**
  * Lists all models.
  */
 public function actionIndex()
 {
  $dataProvider=new CActiveDataProvider('Students');
  $this->render('index',array(
   'dataProvider'=>$dataProvider,
  ));
 }

 /**
  * Manages all models.
  */
 public function actionAdmin()
 {
  $model=new Students('search');
  $model->unsetAttributes();  // clear any default values
  if(isset($_GET['Students']))
   $model->attributes=$_GET['Students'];

  $this->render('admin',array(
   'model'=>$model,
  ));
 }

 /**
  * Returns the data model based on the primary key given in the GET variable.
  * If the data model is not found, an HTTP exception will be raised.
  * @param integer $id the ID of the model to be loaded
  * @return Students the loaded model
  * @throws CHttpException
  */
 public function loadModel($id)
 {
  $model=Students::model()->findByPk($id);
  if($model===null)
   throw new CHttpException(404,'The requested page does not exist.');
  return $model;
 }

 /**
  * Performs the AJAX validation.
  * @param Students $model the model to be validated
  */
 protected function performAjaxValidation($model)
 {
  if(isset($_POST['ajax']) && $_POST['ajax']==='students-form')
  {
   echo CActiveForm::validate($model);
   Yii::app()->end();
  }
 }
}


*notes
1. Tanda "*" = Semua user
2. Tanda @ = autentikasi user. didalamnya termasuk admin, login user biasa
3. admin = spesifik user name

Sekarang untuk mencobanya, anda ketikan URL berikut pada browser :

http://localhost/Belajar_Yii/website/students/admin

apabila anda belumn mengubah URL anda masukan seperti ini :

http://localhost/Belajar_Yii/website/index.php?r=students/admin

*notes kode yang berwarna merah adalah direktori folder Yii Framework anda di localhost.

Seakarang cobalah anda login dengan menggunakan akun level 2, contoh username : rias dan pass : gremory. kemudian anda cobalah menghapus salah satu data murid di dalamnya, maka akan muncul pesan seperti berikut :

Membuat Otorisasi Halaman Pada Yii Framework

Hal ini disebabkan karena rias adalah admin biasa atau admin level 2 dan tidak memliki otorisasi unutk mengakses halaman tersebut. Sekarang anda cobalah login degan menggunakan user level 1 contoh user : jin dan pass : jin dan coba lakukan hal yang sama.

Otorisasi Halaman Pada Yii Framework sekarang sudah selesai, baca juga tutorial belajar Yii Framework lainnya.

Terima Kasih Telah Mengunjungi Blog Sederhana Ini.

Di Mohon Apabila Anda Ingin Mengcopas Artikel Pada Blog ini Cantumkan URL Sumber.

Sebagai Pengunjung Yang Baik Anda Dapat Meninggalkan Komentar di Blog Sederhana Ini.

Share this post

3 komentar

:) :) :-) :-) :)) :)) =)) =)) :( :( :-( :-( :(( :(( :d :d :-d :-d @-) @-) :p :p :o :o :>) :>) (o) (o) [-( [-( :-? :-? (p) (p) :-s :-s (m) (m) 8-) 8-) :-t :-t :-b :-b b-( b-( :-# :-# =p~ =p~ :-$ :-$ (b) (b) (f) (f) x-) x-) (k) (k) (h) (h) (c) (c) cheer cheer

 
© Jin Toples Programming
Designed by BlogThietKe Cooperated with Duy Pham
Released under Creative Commons 3.0 CC BY-NC 3.0