Como saber el rol del usuario

Hola chicos,

Estoy teniendo problemas con el framework, asigno roles y me autentifico con la base de datos, pero quiero personalizar el menú de arriba en función del tipo de usuario, el problema llega al comprobar el usuario en el login.

Esto lo quiero hacer en /protected/views/layout/main.php

Existe alguna operación que te devuelva el rol del usuario activo??

Aclaración: No tengo nada en la base de datos que indique el rol de cada usuario, estos se diferencian por estar almacenados en distintas tablas.

Hola Vares,

Si estuviera usando el control de roles interno de Yii le diría que lo hiciera con:




Yii::app()->user->checkAccess('nombre_de_rol')



Pero considerando que está en tablas diferentes creería que debería hacer algo como:




if(Roles1::model()-findByAttributes(array('usuario_id'=>Yii::app()->user->id))){

//Encontrado en tabla 1

} else if(Roles2::model()-findByAttributes(array('usuario_id'=>Yii::app()->user->id))){

//Encontrado en tabla 2

} else {

//Sin permisos

}



De todas formas le recomiendo usar RBAC de Yii :)

Saludos y éxitos,

Ricardo

Yo me comi la cabeza bastante con los roles, te cuento asi por encima ya que no se ni lo que tienes echo ni como.

  • Yii tiene soporte para roles, pero no trae un gestor de roles o instalas una extensión o lo haces con código

  • Si usar el sistema interno has de crear unas tablas con campos específicos y nombres específicos (se pueden cambiar en la cfg)

  • Yo para gestionar roles he usado srbac con algunas modificaciones.

  • Para controlar un rol en una vista hago Ej: en un menú:




....

array('label'=>Yii::t('main','Users'), 'url'=>array('/user'), 'visible'=>Yii::app()->getUser()->checkAccess('admin')),

...

En el controlador:


public function accessRules()

	{

		return array(

			array('allow',  // allow all users to perform 'index' and 'view' actions

                                        // NOTA: Si hay varias reglas se tienen que cumplir todas (Ej: roles y users)

				'actions'=>array('index','view'),

				'roles' => array('admin','user'),

			),

....

O puedes hacer un control específico para un comando con un if de toda la vida.

Un saludo.

Gracias por las respuestas, robregonm al final lo hice de la segunda manera, así es como tenia la función authenticate.