Login Y Layout Diferentes Para Tipo De Usuario

Buenos dias, mi inconveniente es el siguiente:

1-Quiero que en el index salga para que me pueda autenticar con un layout diferente al estandard

2-Una vez que me loguee me muestre el layout dependiendo si el usuario es admin o tenga otro rol

Me encantaria que me puedan ayudar. gracias!

1- en el controlador , en el actionIndex(), pon el layout que quieras




public function actionIndex(){

  $this->layout='//layouts/column1';

  ....

}



2 - Cuando te loguees guarda en una variable de session el layout que va a utilizar dependiendo del rol.

Si lo vas a utilizar para todos los controladores pon en el Controller la lógica para actualizar el layout y guarda en

$this->layout el layout que quieras.

Un saludo

+1

buenas en mi caso lo que necesito es que segun el rol del usuario vea la informacion en el grid de admin parcia o total, o sea si eres adminA que solo vea la info de adminA o si eres super lo puedas ver todo, alguna sugerencia

no se si lo q hago yo te sirva :D pero prueba




public function search()

	{

		

//recupero los datos del usuario 

$usuario= UserCruge::model()->findByAttributes(array('iduser'=> Yii::app()->user->id));


$criteria=new CDbCriteria;


/*valido q la informacion del grid se muestre acorde con el id del usuario logeado para ello verifico si es un "admin"

(en mi caso no tengo sino admin y usuario de roles) pues le deja ver todos los regiustros del grid,

en caso de ser otro roll muestra el filtro que le aplico de acuerdo al id....

ya seria q en tu caso jugaras con esta regla <img src='http://www.yiiframework.com/forum/public/style_emoticons/default/biggrin.gif' class='bbc_emoticon' alt=':D' />*/


		if (Yii::app()->user->checkAccess('admin'))

		{

			$criteria->compare('pers_auxi',$this->pers_auxi);

		}

		else

		{

		$criteria->compare('pers_auxi',$usuario->pers_auxi);	

		}


		$criteria->compare('vehr_codi',$this->vehr_codi);	

		$criteria->compare('eslv_codi',$this->eslv_codi);

		$criteria->compare('eslv_clas',$this->eslv_clas,true);

		$criteria->compare('eslv_tipo',$this->eslv_tipo,true);

		$criteria->compare('eslv_anio',$this->eslv_anio);

		$criteria->compare('eslv_valo',$this->eslv_valo,true);

		$criteria->compare('eslv_fech',$this->eslv_fech,true);

		$criteria->compare('esta_codi',$this->esta_codi,true);


		return new CActiveDataProvider($this, array(

			'criteria'=>$criteria,

		));

	}



Por lo que entiendo quieres q un CGridView muestre más o menos columnas dependiendo del rol de usuario, no?

Pues bien. Las columnas de los CGridViews tienen una propiedad llamada visible. Entonces lo que tienes que hacer en mostrar o ocultar la columna dependiendo del rol del usuario.

Imaginemos que tienes una propiedad en tu user llamada isAdmin() que devuelva true si somos administradores o false si no lo somos. Pues podríamos tener el siguiente código para las columnas del CGridView:




...

'columns' => array(

                  array(

                       'name' => 'nombeDato1',

                       'value' => 'valorDato1',

                       ),

                  array(

                       'name' => 'nombreDato2',

                       'value' => 'valorDato2',

                       'visible' => Yii::app()->user->isAdmin(),

                  )

...



La columna para el dato 1 se mostrará siempre, independientemente del tipo de usuario.

La columna para el dato 2 sólo será visible por los usuarios administadores.

Un saludo.

muchas gracias por la respuesta pq no sabia lo del visible en las columnas del grid, pero mas bien en vez de las columnas lo que variaria es las filas o sea la info dentro del grid segun el rol del usuario. esa es la duda que tengo, lo misma que tengo para segun el rol del usuario loggeado en el create me salga un dropdown con el campo predeterminado ej

dropdown

infoa

infob

infoc

cuando se loguee el usuario con el rol admina, quisiera que cdo fuera insetart una entidad(que es lo que se hace en el sistema) solamente en el combo le salga infoa que es la que a el le pertenece. gracias

Pero entonces lo que tienes que modificar es la función que carga el dataprovider de tu CGridView (supongo que $model->search()), añadiéndole una condición con el tipo de usuario logueado.

De hecho, te lo ha explicado erickMartinez en un post anterior.

Un saludo.

amigo me pudieras explicar en tu codigo la parte de la condicion, disculpa si soy algo "lento",

if (Yii::app()->user->checkAccess(‘admin’))

	{


		&#036;criteria-&gt;compare('pers_auxi',&#036;this-&gt;pers_auxi);


	}


	else


	{


	&#036;criteria-&gt;compare('pers_auxi',&#036;usuario-&gt;pers_auxi);	


	}

esta es la parte que no entiendo muy bien

gracias