[RISOLTO]Settare un layout in base alla persona loggato

Salve ragazzi avrei un problema vorrei settare un layout in base alla persona loggata.

Ovvero non so dove fare il controllo, io avevo pensato di metterlo in accessRules ma non trovo la propietà per settare il layout.

Potresti intercettare l’evento onBeginRequest e sfruttare la classe CWebUser oppure le sessioni dell’utente per decidere quale layout utilizzare. Non l’ho mai fatto ma è molto interessante come cosa da fare.

Ciò che faccio io è praticamente la proposta di Sensorario: l’utente ha tra i parametri del db il suo layout, il suo modulo di apertura all’accesso, etc etc.

In questo modo non metto troppi if o switch e gestisco il tutto con Layout=$Yii::app()->$user->getstate(‘layout’)…

ci provo e vi faccio sapere :blink:

ok ragazzi risolto allora nel controller setto il layout ,dentro il layout vado a controllare con un if in questa maniera :


if( Yii::app()->user->group==3 ){

                            $this->layout='destinazione';

                }else{

                      $this->layout='altra_destinazione';

}

FUNZIONA, cosa ne pensate?

Io fossi in te, cercherei di isolare il codice per renderlo più leggibile.




public function showNormalView() {

    return Yii::app()->user->group===3;

}


public function getLayout() {

    if($this->showNormalView())

        return 'destinazione';

    return 'altra_destinazione';

}


$this->layout=$this->getLayout();



grazie sensorario, mi piace più la tua come soluzione :D

Ho solo rifattorizzato il tuo codice. E’ un “esercizio” che faccio spesso per isolare ogni singola responsabilità.