Yii framework: come specificare le stesse regole di accesso per tutti i controller del modulo?
Domanda
Ho creato un modulo per operazioni specifiche dell'amministratore. Non voglio scrivere le stesse regole di accesso per ogni controller, non è abbastanza stile di codifica.
Soluzione
Una soluzione sarebbe quella di estendere un controller BaseClass comune per ogni classe autenticata.
In questo modo puoi scrivere una volta.
Altri suggerimenti
Il modulo è come un'applicazione secondaria con struttura di directory separata. Non è responsabile del filtraggio o del controllo delle autorizzazioni.
L'unica soluzione vitale è definire una nuova astrazione come proposto da Ismael.
class ExtendedController
{
public function rules()
{
return array_merge(parent::rules(), array(
// your rules
));
}
}
Le scelte di Ismael e Pestaa sono molto buone anche se veloci da implementare, tuttavia consiglio sempre alternative più potenti come il modello RBAC. Puoi trovare un'ottima GUI per Yii RBAC in http://code.google.com/p/srbac/
Questo ha funzionato per me:
class extendedController extends baseController
{
public function accessRules()
{
return array_merge(
// This controller's rules are added first:
// Allow all users to call the 'hello' action.
array(
array('allow',
'actions'=>array('hello'),
'users'=>array('*'),
),
),
// BaseController rules are added last, especially
// if the last rule in the baseController denies all
// users that were not allowed yet.
parent::accessRules()
);
}
public function actionHello()
{
echo('Hello!');
}
}