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.
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
),
‘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
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.
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.