Yii framework - comment spécifier les mêmes règles d'accès pour tous les contrôleurs du module?
Question
J'ai créé un module pour des opérations spécifiques à l'administrateur. Je ne veux pas écrire les mêmes règles d'accès pour tous les contrôleurs, ce n'est pas un style de code assez joli.
La solution
Une solution consisterait à étendre un contrôleur BaseClass commun pour chaque classe authentifiée.
Ainsi, vous pourrez écrire une fois.
Autres conseils
Le module est comme une sous-application avec une structure de répertoires séparée. Il n'est pas responsable du filtrage ou de la vérification de l'autorisation.
La seule solution vitale consiste à définir une nouvelle abstraction comme proposé par Ismael.
class ExtendedController
{
public function rules()
{
return array_merge(parent::rules(), array(
// your rules
));
}
}
Les choix d’Ismael et de Pestaa sont très bons, même rapides à mettre en œuvre. Néanmoins, je recommande toujours des alternatives plus puissantes comme le modèle RBAC. Vous pouvez trouver une très bonne interface graphique pour Yii RBAC dans http://code.google.com/p/srbac/
Cela a fonctionné pour moi:
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!');
}
}