Renderizar vista admin.php restringida

Buenas!

Estoy haciendo un sistema de avisos clasificados para aprender un poco.

Necesito que un usuario pueda dirigirse hacia su perfil y vea debajo de sus datos la vista de /aviso/admin.php PERO que solo pueda ver SUS avisos, es decir los que él ha creado. Puedo identificar que usuario ha creado un aviso mediante el atributo ‘idUsuario’ de la tabla Aviso en mi DB. Me imagino que viene por el lado de compararlo con Yii::app()->user-id.

En la vista /aviso/admin.php tengo una columna destinada a aprobar los avisos y quiero que esta sea solo visible por el administrador, a quien identifico mediante un atributo boolean ‘admin’ en la DB.

Conclusión:

Usuario -> ve solo sus avisos.

Admin —> ve TODOS los avisos y la columna ‘aprobado’.

Ideas, ayudas? Gracias

Para verificar si el usuario es admin, crea un método de instancia en el modelo Usuario:




public function getEsAdmin() {

	return $this->admin ? true : false;

}



Luego en la acción [font="Courier New"]view[/font] del controlador [font="Courier New"]UsuarioController[/font] (o el nombre del controlador que usas para mostrar el perfil) haces algo así:




public funtion actionView($id) {

	$model = $this->loadModel($id) (donde imagino que $model es una instancia de usuario

	$avisos = new Avisos();


	$usuario = Usuario::model()->findByPk(Yii::app()->user->id);

	if(!$usuario->esAdmin)

		$avisos->id_usuario = $usuario->id; // en la vista se utilizará el método search() del modelo avisos. Al definir la id de usuario, restringimos los avisos que se verán.


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

		'model' => $model,

		'avisos' => $avisos,

		'usuario' => $usuario,

	));

}



Posteriormente en el tu vista haces algo así (prefiero incluir el widget en vez de hacer un renderPartial de /aviso/admin.php):





$this->widget('zii.widgets.grid.CGridView', array(

    'id' => 'avisos-grid',

    'dataProvider' => $avisos->search(),

    'filter' => null, // si quieres agregas filtros dándole el valor $avisos en vez de null

    'columns' => array(

        // [...] los campos que se muestran siempre

	array(	// columna de admin

		'name' => 'aprobado',

		'value' => "$data->aprobado ? 'aprobado' : 'pendiente'",

		// 'filter' => CHtml::activeDropDownList($model, 'aprobado', array(

						0 => 'pendiente',

						1 => 'aprobado',

					), array(

						'empty' => 'todos', // muestra todos los avisos independiente el estado

					)), // si quieres un dropdown para filtrar estado de aprobación. Esto es asumiendo que aprobado es un boolean con valores 0 y 1.

		'visible' => $usuario->esAdmin,

	),

        array(

            'class' => 'CButtonColumn',

            'template' => '{delete}',// puedes cambiar el valor para que se muestren más botones. Las opciones son {view}{update}{delete}

            'deleteButtonUrl' => 'array("avisos/delete", "id" => "$data->id")', // acá tienes que arreglarlo para que haga el request al actionDelete que solo puede ir por $_POST. No recuerdo en estos momentos la modificación exacta que hay que hacerle.

        ),

    ),

));