Roles De Usuario

He notado que hay 3 roles de usuario en Yii: Visitante, usuario y administrador. Por otro lado, me he fijado que el método Yii::app()->user->isGuest sirve para separar visitantes de usuarios.

Entonces la pregunta es, ¿cómo sabe Yii que el usuario logueado corresponde a un administrador y no a un usuario logueado normal?

Me cabe la duda porque dentro de las reglas de acceso de cualquier controlador, están las líneas




	array('allow', // allow admin user to perform 'admin' and 'delete' actions

				'actions'=>array('admin','delete'),

				'users'=>array('admin'),

			),

donde claramente admin está definido en algún lado.

Cualquier ayuda se agradece!

Yii no sabe si un usuario es administrador o usuario normal, de hecho puedes utilizar los roles que tu quieras, yii solo puede saber si el usuario ha iniciado sesión o no ha iniciado sesión, si no ha iniciado sesión es un visitante, lo unico que identifica yii es el nombre de usuario, en las reglas de acceso que pones de ejemplo solo define que el usuario admin(admin es un nombre de usuario no es un rol) puede acceder y que puede hacer las acciones de admin y de delete,para los roles puedes agregar en tu tabla de usuarios una columna que indique de que rol es el usuario y en yii extiendes la clase CWebUser y le agregas una función que te indique si es administrador o si es usuario con un rol determinado, y en las reglas de acceso pones la función que crees.


array('allow', // allow admin user to perform 'admin' and 'delete' actions

    'actions'=>array('admin','delete'),

    'expression'=>"Yii::app()->user->isAdmin()",//La función que se crea se pone aqui, en este caso para identificar si es un usuario con perfil administrador

),

Gracias por la respuesta, me ayuda bastante.

¿De modo que "admin" es un username? Si es así, ¿debe ser estrictamente un username? O sea, yo podría declarar


'users'=>array('loquesea')

siempre y cuando tenga un usuario en mi base de datos con username "loquesea", ¿es correcto?

Retomando el punto anterior y lo que señalas sobre los roles, en la clase UserIdentity, dentro del método authenticate, tengo lo siguiente:


if($user->id_rol == 1) //Admin = 1, Usuario Normal = 2

		$this->setState('administrador', true);

	else 

		$this->setState('administrador', false);

De esta forma puedo consultar con Yii::app()->user->administrador si es administrador o no, pero está mucho mejor de la forma que señalas.

Gracias por la ayuda!

‘users’=>array(‘loquesea’) quiere decir que hay un usuario en tu base de datos con username “loquesea”, y le da permisos para realizar las acciones que pongas.

Tambien puedes hacer uso del authManager para crear los roles como explica el siguiente link

control se acceso basado en roles

Gracias amigo por la ayuda, pude resolverlo como indicaste extendiendo la clase CWebUser. Me apoyé en este topic :rolleyes:

Saludos!

Yii Framework te esta dando un mecanismo de manejo de roles muy básico, hecho asi para amoldarse a tu aplicación. Hay muchos frameworks de manejo de usuarios que deberías usar, y digo "deberías" porque es complejo y largo. Te ofrezco Cruge, hay otros, pero cruge es basicamente en español y con muchisima documentación.

http://yiiframeworkenespanol.com/cruge hay otros,

uses o no uses un framework de gestión de usuarios debes complementar tu mecanismo con RBAC, para eso yii trae un authManager, CDbAuthManager que es muy sencillo de usar (cruge enlace arriba lo usa y te da un gestor visual de rbac, solo usar, no programar)

Gracias Christian, aunque para este proyecto en el que esoy trabajando es suficiente con el mecanismo nativo de Yii, lo voy a revisar par aplicarlo a futuros desarrollos.

Saludos!