Framework Grails
 

Patrón MVC: Controladores - Ejercicios

Filtros para los mensajes (1 punto)

Vamos a dar un paso más en el tema de la seguridad de nuestra aplicación y lo vamos a hacer añadiendo los filtros necesarios para sólo los usuarios registrados puedan enviar mensajes. En caso de que el usuario no se haya identificado, lo redirigiremos a la página de login. El nombre de este filtro debe llamarse checkLoggedInUser().

Además, vamos a añadir los filtros necesarios para que un usuario no pueda insertar mensajes a nombres de otros usuarios. Este filtro debe llamarse checkCreateUserOwnPosts().

Por último, también vamos a añadir un filtro llamado checkEditAndDeleteUserOwnPosts() que impida a los usuarios editar o eliminar mensajes que no hayan sido creados por ellos. Como pista sirva que para obtener los datos del mensaje debemos obtenerlo de la siguiente forma:

def post = Post.get(params.id)

Tests unitarios sobre el método handleLogin() (1 punto)

Para comprobar que el método login de nuestra aplicación, y aunque si siguiéramos la metodología TDD (Test Driven Development), ésto deberíamos haberlo hecho con anterioridad, vamos a asegurarnos que nuestro método de autenticación funciona tal y como debería con un par de tests unitarios, uno en positivo aceptando al usuario y otro en negativo denegando el acceso al usuario.

Como en nuestro método handleLogin() necesitamos acceder a la clase de dominio User para comprobar que exista un usuario con los datos pasados por parámetros, en nuestro test unitario debemos mockear un objeto del tipo User de la siguiente forma:

@Mock([User])
class UserControllerTests {
	...

	void testHandleLoginOK() {
		mockDomain(User, [[username:"frangarcia",
							name:"Fran",
							surnames:"García",
							email:"fgarciarico@gmail.com"]])
		//Aquí debes escribir el resto del test
	}
}

Termina de completar el método e implementa otro llamado testHandleLoginNotOK() que se encargue de comprobar que a los usuarios no identificados correctamente no les dejaremos entrar a nuestra aplicación. No olvides comprobar también que la variable session.user tiene valor después de una identificación positiva.

Asegurar la creación de los posts (1 punto)

Hasta el momento, cualquier persona podrá crear posts en nombre de cualquier otro usuario ya que tanto las vistas como el controlador ha sido autogenerado gracias al scaffolding estático. Vamos a realizar las modificaciones oportunas para que:

  1. Sólo los usuarios registrados puedan insertar mensajes en el sistema
  2. Cada usuario registrado sólo pueda mandar mensajes en su nombre, para ello, debemos eliminar el seleccionable que permite seleccionar al usuario cuando creamos posts
  3. Asegurarse también de cada usuario sólo puede eliminar sus propios mensajes
  4. En Twitter es imposible editar los mensajes, en el nuestro tampoco deberíamos

No olvides implemementar los tests unitarios para comprobar que los usuarios no pueden crear mensajes en nombre de otros y que sólo él podrá eliminarlos.