Duda Con Limitación De Usuarios

Buenas, soy nuevo en Yii la verdad me ha gustado mucho pero tengo una duda, la verdad ni codigo pongo porque no sé por donde atacar esto, lo que pasa es que yo tengo un inconveniente con los usuarios de mi aplicación (una especie de blog), es decir, puedo logearme con cada uno de ellos, postear con ellos pero no se como limitar a un usuario con sus posts, (me explico) yo entro con usuario A y creo un post, un usuario B puede entrar y modificar el post del usuario A, eso es lo que quiero evitar, quiero que cada usuario solo pueda editar sus posts y no los de otros, la verdad he buscado pero no se con que términos hacerlo y estoy un poco perdido con esto, espero haber sido claro y que me hayan entendido y que por favor me puedan ayudar a encontrar el camino con esto.

Muchas Gracias!

Bueno, para el que quiera saberlo después de indagar por internet encontré algo que me sirvió, no justo como yo quería pero hace lo que quiero y va en el controlador:




public function actionUpdate($id)

{

  $model=$this->loadModel($id);

  // Uncomment the following line if AJAX validation is needed

  // $this->performAjaxValidation($model);

  if(isset($_POST['Entry']))

  {

    if ($model->author === Yii::app()->user->Id)

      {

         $model->attributes=$_POST['Entry'];

	 if($model->save())

	 $this->redirect(array('view','id'=>$model->entry_id));

      }

    else

         throw new CHttpException(401,'You are not authorized to edit this post.');			

   }

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

     'model'=>$model,

   ));

}



Hace que los usuarios vean todos los posts, cuando un usuarioA entra en el post del usuarioB parece que lo fuera a modificar, pero al momento de darle "save" tira la excepción, algo sencillo pero funcional.

Me gustaría saber si alguien más conoce algo mejor o que opiniones tienen acerca de lo que puse.

Gracias.

Entiendo que la solución que encontraste es satisfactoria. Otra manera de hacerlo sería en la misma página (e.g. _form.php) usando JavaScript para desactivar la entrada en el textArea y el botón de guardar. Así no tiene que esperar a llegar al controlador para recibir el mensaje.

Hola:

Yo suelo hacer 2 acciones distintas porque no me gustan las bizrules:

  • actionUpdate

  • actionUpdateOwn

La 2º actualiza los post que ha creado el usuario no los de los demás, y en las rules todos los usuarios autenticados tiene permiso para hacer la acción updateOwn, y algún usuario privilegiado puede actualizar todo con el permiso update.

de esta manera la funcion update quedaría sin restricciones y la que yo llamo updateOwn tendría la restricción que indicas. Aunque yo la suelo poner así:




public function actionUpdate($id)

{

  $model=$this->loadModel($id);

  if ($model->author !== Yii::app()->user->Id) {

    //throw new CHttpException(401,'You are not authorized to edit this post.');                     

    $this->redirect(array('view','id'=>$model->id));

    Yii::app()->end();

  }

  ....

}



Es decir si no eres el propietario, fuera de aquí…, el resto como la funcion update

Si luego en las vistas te curras que los enlaces sean a updateOwn si el mensaje es propio, update si no lo es o ninguno si nadie tiene permisos, nadie debe llegar a la excepcion por tus enlaces.

Un saludo

Buenas.

Pues yo creo q se podrían hacer 2 cosas más “Yiizadas”. :lol:

1- Te creas una propiedad que en tu modelo de comentarios como por ejemplo "isOwner", que valga True si eres el propietario y false si no lo eres. Por lo tanto cuando cargues los botones de actualizar lo compruebas y los muestras o no dependiendo del usuario logueado.

2- Crear una rule en mi modelo que sólo permitiera a cada usuario modificar sus comentarios. Así sólo con $model->save() te lo validaría. la pega de esta es q hasta q no envía el submit el usuario piensa q puede modificarlo.

Mejora la 1ª forma. Así sólo verás los botones editar en tus comentarios.

Un saludo.