Access Rules E Cdbauthmanager

Salve, stavo iniziando a provare CDbAuthManager,però non ho ben capito se nel mio caso mi può essere utile o bastano le access rules o se in qualche modo sono collegate al CDbAuthManager ;Io ho un pannello di controllo dove vorrei avere due tipi di gestione; una è l’admin e l’altra gli utenti.ad esempio dovrei gestire la tabella utenti

tabella: id,nome,username,password

in questo caso solo l’amministratore può vedere,inserire,eliminare; mentre l’utente non può fare nulla!; facendo delle prove con access rules




public function accessRules()

	{

		return array(

			array('allow',  // allow all users to perform 'index' and 'view' actions

				'actions'=>array('index','view'),

				'users'=>array('admin'),

			),

			array('allow', // allow authenticated user to perform 'create' and 'update' actions

				'actions'=>array('create','update'),

				'users'=>array('admin'),

			),

			array('allow', // allow admin user to perform 'admin' and 'delete' actions

				'actions'=>array('admin','delete'),

				'users'=>array('admin'),

			),

			array('deny',  // deny all users

				'users'=>array('*'),

			),

		);

	}



in questo caso chi ha username = admin può eseguire tutto, quindi mi chiedo se si utilizza access rules dovrei aggiungere un campo di nome “ruolo” nel db e valorizzarlo con “admin” o “utente” a seconda dell’esigenza!..e nelle access rules cosa si dovrebbe modificare?

Stavo seguendo il tutorial su CDbAuthManager dove viene spiegato che possono essere assegnati determinati ruoli e operazione all’utente

volevo capire al differenza tra i due e se utilizzo l’uno non devo utilizzare l’altro??

you can use both at the same time.

the CDbAuthManager is a mechanism for providing more advanced RBAC features, like:


   if(Yii::app()->authManager->checkAccess(Yii::app()->user->id, "supervisor")){  "do supervisor stuff here" } 

  	else throw new CHttpException("Sorry access denied you are not member of Supervisor group");

in this last case the "supervisor" authItem may be a Task a Role or a single Operation, so whenever a user has assigned its authItem (via direct assignation or via child assignation or recursive assignation) then checkAccess will return true. IMPORTANT: You are required to create authItems in your database. A nice tool (framework) for doing this task is using the Cruge Module for Yii (written by me in spanish), another nice tool is: the Rights module, but Cruge is more advanced.

ths first method (accessRules) is similar to CDbAuthManager, in this case you can control who is using an action.

you are required to study in deep about CDbAuthManager in the Yii framework doc, it is very clear and easy to understand.

Allora stavo facendo le prime prove; utilizzando le access rules;

  1. inserito una colonna "role" nella tabella utenti del database

  2. ho estesto CwebUser in components


class WebUser extends CWebUser

{

    /**

     * Overrides a Yii method that is used for roles in controllers (accessRules).

     *

     * @param string $operation Name of the operation required (here, a role).

     * @param mixed $params (opt) Parameters for this operation, usually the object to access.

     * @return bool Permission granted?

     */

    public function checkAccess($operation, $params=array())

    {

        if (empty($this->id)) {

            // Not identified => no rights

            return false;

        }

        $role = $this->getState("role");

        if ($role === 'admin') {

            return true; // admin role has access to everything

        }

        // allow access if the operation request is the current user's role

        return ($operation === $role);

    }

}

  1. nel componente UserIdenty ho aggiunto

$this->setState('role',$user->role);

4)nell accessrules del controller


public function accessRules()

	{

		return array(

			array('allow',  // allow all users to perform 'index' and 'view' actions

				'actions'=>array('index','view'),

				

				 'roles'=>array('admin'),

			),}

5)nell’azione actionIndex


if (Yii::app()->user->isGuest) {

				$this->redirect(array('default/login'));

			}


			elseif (Yii::app()->user->checkAccess('admin')) {


				$dataProvider=new CActiveDataProvider('Attivita');

				$this->render('index',array(

				'dataProvider'=>$dataProvider,

		));

					

				}	

Volevo sapere se ho fatto i passi giusti,cosi facendo dovrei ripetere la condizione nelle azioni del controller

create/delete/update; poi vorrei sperimentare CbAuthManager…