[Yii 2] AccessControl per intero modulo

Salve a tutti mi presento sono Marco. :slight_smile:

Questo è il mio primo post, non sono uno sviluppatore ma spesso ho l’esigenza di crearmi delle interfacce web per poter gestire o meglio far gestire alcuni sistemi. Dopo aver provato diversi Framework in diversi linguaggi ho deciso di provare anche Yii2.

Ho chiaro come applicare il filtro autorizzazione AccessControl per singolo Controller ma se io volessi applicarlo direttamente ad un intero modulo come posso fare?

Grazie.

puoi usare la beforeAction del modulo. li fai un check con user->can(‘nome_autorizzaz_intero_modulo’)

Se ‘non-can’, se dà false il ‘can()’, allore restituisce false, e l’azione non viene eseguita.

In questo caso devi però visualizzare qualcosa all’utente, sennò vede solo una pagina bianca.

Potresti eseguire un throw dell’eccezione 500 - forbidden

Grazie realtebo della risposta ma non ho capito dove applicare la beforeAction tuttavia credo di procedere in questo modo:

Per il modulo creo un controller che estende quello base con l’aggiunta del metodo behaviors() e baso tutti i controlli del modulo con il nuovo controller.

Uhm, effettivamente è una strada buona anche questo, forse migliore per il fatto che ‘in seguito’ il codice risulta piu leggibile.

Mi riferivo a questa funzione: beforeAction()

Il link è alla guida api 2.0 ufficiale

La via suggerita da realtebo è forse migliore se vuoi lavorare a livello di modulo.

Nella tua classe "Module" che estende "\yii\base\Module" puoi dichiarare il metodo "beforeAction", in questo modo tutte le action del tuo modulo passeranno per quel metodo.




class Module extends \yii\base\Module {

  ...

  public function beforeAction($action) {

        if (!parent::beforeAction($action)) {

            return false;

        }


        if (!$this->checkAccess()) {

            throw new ForbiddenHttpException('Non puoi accedere a questa pagina.');

        }

  }

  ...

}