[RESUELTO] CRUD solo de las filas permitidas

Hola,

He creado un CRUD desde Gii que permite administrar todas las filas de una table. Me gustaría que solo se puedieran hacer labores de administración dependiendo de un campo concreto que coincide con una variable de Sesión.

En el momento de hacer login desde CUserIdentity, ya guardo la variable cod_cliente en sesion.

La tabla en cuestion contiene los siguiente campos:




email

password

nombre

apellidos

cod_cliente



Dónde para un mismo cod_cliente puede haber varias filas en la tabla.

He probado lo siguiente en el controlador, por ejemplo para la acción index:




        /**

	 * Lists all models.

	 */

public function actionIndex()

{

        //Comprobamos que el usuario está registrado y en sesión. La variable usuario contiene la información

	$x=Yii::app()->getSession()->get('usuario');

        if($x===null)

            throw new CHttpException(403,'Vaya al login');

          

        $cod_cliente=$x['COD_CLIENTE']; 

        

        if($cod_cliente===null)

             throw new CHttpException(404,'La paqina solicitada no existe.');

   

        $criteria=new CDbCriteria;

        $criteria->addCondition("cod_cliente=$cod_cliente");

        

		$dataProvider=new CActiveDataProvider('Users');

		$this->render('index',array(

			'dataProvider'=>$dataProvider,

                        'criteria'=>$criteria,

                        'pagination'=>array('pageSize'=>5),

		));

}




La vista no la he tocado, index.php:




<?php

/* @var $this UsersController */

/* @var $dataProvider CActiveDataProvider */


$this->breadcrumbs=array(

	'Users',

);


$this->menu=array(

	array('label'=>'Create Users', 'url'=>array('create')),

	array('label'=>'Manage Users', 'url'=>array('admin')),

);

?>


<h1>Users</h1>


<?php $this->widget('zii.widgets.CListView', array(

	'dataProvider'=>$dataProvider,

	'itemView'=>'_view',

)); ?>



Pero una vez logueado, cuando voy a index.php?r=Users/index sigo viendo TODAS las filas de la tabla. No se si incluso podría ser una restricción a poner en el modelo.

Saludos y gracias de antemano.

Pudiera ser util declarar en el modelo Named Scopes, en concreto lo que comentan mas abajo en "Parameterized Named Scopes". Una forma de restringir los resultados de la query al db.

Espero sea de ayuda!

Hola,

gracias ramabarca,no conocía los "named scopes" y ya se me están ocurriendo usos. Pero para solucionar lo que comentaba arriba ha sido tan sencillo como esto:




//Creamos un nuevo CActiveDataProvider con nuestras condiciones

$dataProvider=new CActiveDataProvider('Users', array(

            'criteria'=>array(

                'condition'=>"cod_cliente=$cod_cliente",

                'order'=>'email DESC',

            ),

            'pagination'=>array(

                'pageSize'=>20,

            ),

        ));


//Lo pasamos a la vista

$this->render('index',array(

	'dataProvider'=>$dataProvider,

));



No se porque al principio estaba metiendo el criteria en el render… gran error.

Un saludo!