Yii framework: come specificare le stesse regole di accesso per tutti i controller del modulo?

StackOverflow https://stackoverflow.com/questions/1612472

  •  06-07-2019
  •  | 
  •  

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.

È stato utile?

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!');
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top