Se hai pochi ruoli, puoi usare le expression nelle acces rules.
Per esempio, dovendo distinguere solo fra admin e users, io ho fatto così
In UserIdentity (nel caso l’autenticazione abbia successo):
$this->_id = $user->id;
$this->username = $user->user_name;
$this->setState('role', strtolower($user->type->name));
$this->errorCode = self::ERROR_NONE;
poi ho creato un controller base da cui ereditano tutti gli altri controller
con queste regole
public function accessRules()
{
return array(
array('allow', // admins can do everything
'expression'=>'Yii::app()->user->getState("role")=="admin"',
),
array('deny', // users cannot create/update/delete
'actions' => array('update', 'create', 'delete'),
'expression'=>'Yii::app()->user->getState("role")=="user"', // or !="admin" if you have more than 2 roles
),
array('allow', // allow all anonymous users to perform login actions
'actions' => array('login'),
'users'=>array('?'),
),
array('deny', // deny all anonymous users
'users'=>array('?'),
),
);
}
in questo modo solo gli utenti admin potranno accedere alle action create/update e delete
mentre per tutti gli altri verrà generata un’eccezione.
nel tuo caso diventerebbe
public function accessRules()
{
return array(
array('allow', // admins ca do everything
'expression'=>'Yii::app()->user->getState("role")=="admin"',
),
array('allow', // users can see their profiles
'actions' => array('profile'),
'expression'=>'Yii::app()->user->getState("role")=="user"',
),
array('allow', // allow all anonymous users to perform login actions
'actions' => array('login'),
'users'=>array('?'),
),
array('deny', // deny all users
'users'=>array('*'),
),
);
}
Se hai bisogno di dare accesso anche agli utenti con privilegi minori a determinate sezioni,
puoi fare l’override della funzione accessRules nel tuo controller, seguendo la stessa logica.
Tutto ciò che non è esplicitamente vietato, è concesso, ecco perché nel mio caso non devo
dare accesso agli utenti di tipo user, perché ad essere vietato è l’accesso ai soli utenti non
autenticati.
Devo solo vietargli l’acesso ale azioni che non voglio possa eseguire.
Spero di esserti stato d’aiuto.