Validación y sessions, básico... pero esencial

Hola a todos!

Tengo CRUD que está hecho con gii y estoy modificando para obtener los resultados que deseo.

Hay dos niveles de usuarios correspondientes a la tbl_usuarios. Lo que hago en UserIdentify es consultar al modelo Usuarios si existe el usuario y luego comprobar clave. En ese modelo está definido el Rol.

Rol uno: administrador (hace todo)

Rol dos: Solo accede a contenido de una Tabla documentos relacionada en el modelo.

La pregunta es: ¿cómmo hago para que el Rol dos se cumpla?

No logro encontrar la forma de decirle al Modelo documentos: Hola, soy Usuario:id, me das mis documentos?

Gracias, sepan comprender que soy nuevo en Yii.

Saludos,

Si entendí correctamente, tendríamos que hacer una condición con el rol, en donde si es el rol 1 entonces ejecute un findAll sin condiciones, pero si es el rol 2 entonces el findAll debería llevar ciertas condiciones, o estoy equivocado?

Creería que podría ser algo como:





if(Yii::app()->user->checkAccess('rol1')){

$result = Table::model()->findAll();

} elseif(Yii::app()->user->checkAccess('rol2')) {

$result = Table::model()->findAllByAttributes(array('campo1'=>'valor'));

}



Espero que esto sea de ayuda.

Saludos y éxitos,

Ricardo

Gracias por el Aporte.

Que sucede si en el método authenticate() y habiendo pasado las comprobaciones de identidad hago:


$this->setState('id_usuario', $user->id);

y luego en el ejemplo:


if(Yii::app()->user->checkAccess('rol1')){

$result = Table::model()->findAll();

} elseif(Yii::app()->user->checkAccess('rol2')) {

$result = Table::model()->findAllByAttributes(array('usuario_id'=>Yii::app()->user->id_usuario));

}

¿Sería correcto?

Slds!

Es totalmente válido, el setState usualmente se hace en la clase UserIdentity que está en el directorio protected/components.

Aunque usualmente en mis aplicaciones suelo definir el id en un estado con el mismo nombre con el fin de llamarlo Yii::app()->user->id, pero bueno, eso ya es convención de cada uno.

Espero haya sido de utilidad.

Saludos y éxitos,

Ricardo

Nuevamente muchas gracias!

Quiero agregar viendo este Post y ampliando el concepto desde la documentación de CAccessControlFilter podemos utilizar diferentes Reglas. Hay una en particular que se llama Expression y desde allí podríamos realizar combinaciones con las validaciones realizadas en authenticate().

De todas formas, pongo en dudas este método de validación a definición de roles. Seguiré profundizando en rbac para mejorar a futuro.

Sería bueno tener como un directorio de ejemplos de códigos, que les parece?

Gracias! Slds!