Todo sitio web, requiere de manejo de roles de usuarios, en este ejemplo explicare como entrega privilegios para los usuarios “administradores” (acceso total de algunas vistas del sitio web).

Cosas a tener presente.

Dentro del MVC, en el controlador de YII, encontramos la función “accessRules”, en esta función poseemos un arreglo de las vistas (index, create, admin, etc)   y los usuarios que tienen acceso a esta vista.

    public function accessRules()
    {
        return array(
            array('allow',  // allow all users to perform 'index' and 'view' actions
                'actions'=>array('view'),
                'users'=>array('*'),
            ),
            array('allow', // allow authenticated user to perform 'create' and 'update' actions
                'actions'=>array('create','update','index', 'delete'),
                'users'=>array('@'),
            ),
            array('allow', // allow admin user to perform 'admin' and 'delete' actions
                'actions'=>array('admin'),
                'users'=>array('admin'),

            ),
            array('deny',  // deny all users
                'users'=>array('*'),
            ),
        );
    }

Por defecto YII posee un usuario administrador llamado “admin”, como podemos tener otros usuarios, administradores (juan , pepe, etc), con otros nombres, hay que  entregarle esos nombres. Para ello en el Modelo de usuarios, crearemos una función que  consulta por el nombre de todos los usuarios administradores (para este ejemplo asumir que en la BDD, tabla usuarios en la columna “rol” de la base de datos, el numero 1 sera para administradores, otros números serán otro tipo de roles).

 public function GetAdmins(){
$connection=Yii::app()->db;
$command= $connection->createCommand("SELECT nombre FROM USER WHERE rol=1");
//$rows = $command->queryRow();
$rows = array();
$dataReader=$command->query();
while(($row=$dataReader->read())!==false){
array_push($rows, $row['nombre']);
}
return $rows;
}

Ahora en el controlador de la vista a la cual queremos controlar el acceso, vamos nuevamente a la función “accessRules” y modificamos la linea donde establece a los usuarios que poseen las vistas de administración del sitio web.

    public function accessRules()
    {
        return array(
            array('allow',  // allow all users to perform 'index' and 'view' actions
                'actions'=>array('view'),
                'users'=>array('*'),
            ),
            array('allow', // allow authenticated user to perform 'create' and 'update' actions
                'actions'=>array('create','update','index', 'delete'),
                'users'=>array('@'),
            ),
            array('allow', // allow admin user to perform 'admin' and 'delete' actions
                'actions'=>array('admin'),
                /*'users'=>array('admin'),*/
              'users'=>Users::model()->GetAdmins(),//ENTREGA UN ARREGLO CON LOS ADMINISTRADORES
            ),
            array('deny',  // deny all users
                'users'=>array('*&#
039;),
            ),
        );
    }

y Listo 🙂

Saludos