Supponiamo abbiate installato il vostro sistema correttamente ed anche con Rights… Supponiamo vogliate permettere ad un utente, (all’interno del vostro negozio online realizzato con Yii), di poter visualizzare il proprio ordine ma non quello di altri.

Inoltre, all’interno del nostro negozio avremo anche l’amministratore che deve vedere gli ordini di tutti. Quindi abbiamo 2 Ruoli da definire:

Amministratore e Cliente.

L’amministratore può: vedere tutti gli ordini

Il Cliente può: vedere solo il proprio ordine.

Il controller che gestisce gli ordini si chiamerà OrderController con la relativa azione actionView, in questo modo…

class OrderController extends RController {

...

public function actionView() {

...

}

...

}

A questo punto, all’interno di Rights, dal pannello di controllo aggiungiamo un Task e chiamiamolo viewOwnOrder e come regola mettiamo:

return Yii::app()->user->id==$params["order"]->customer_id;

Questa permette di controllare che l’utente loggato abbia il solito id associato all’ordine.

Creato il Task entriamo all’interno dello stesso ed aggiungiamogli come figlio: Order.View

Andiamo poi sul ruolo Cliente ed aggiungiamo come figlio il task: viewOwnOrder

La parte dei permessi in Rights è conclusa.

Torniamo al nostro controller OrderController ed inseriamo:

public function actionView()
	{
           $model=$this->loadModel();
 $params=array('order'=>$model);
 if(Yii::app()->user->checkAccess('viewOwnOrder',$params) || Yii::app()->user->checkAccess('Amministratore'))
               $this->render('view',array(
					'model'=>$this->loadModel(),
                    ));
            else
                throw new CHttpException(404,'The specified post cannot be found.');
	}

L a parte evidenziata è quella che ci permette di controllare se l’utente rispetta le condizioni del Task, tramite checkAccess(), oppure se è Amministratore.

Ricordatevi di attivare nel config.php della vostra app, la BizRule per Rights, tramite:

….

'rights'=>array(
                'enableBizRule'=>true,