El tutorial Jobeet

6.10. Restringiendo el acceso a la página de una oferta de trabajo

Cuando una oferta de trabajo expira, ya no debe ser posible visualizar su información, aunque se conozca su URL. Prueba a acceder a la URL de la oferta de trabajo que hemos insertado como expirada (debes reemplazar el valor de la variable id por el valor del id de tu base de datos, que puedes obtener con la consulta SELECT id, token FROM jobeet_job WHERE expires_at < NOW()):

/frontend_dev.php/job/sensio-labs/paris-france/ID/web-developer-expired

La aplicación no debería mostrar los detalles de la oferta de trabajo, sino que debería reenviar al usuario a una página de error 404. Pero, ¿cómo podemos hacerlo si la oferta de trabajo se obtiene automáticamente en la ruta?

Las rutas de tipo sfPropelRoute utilizan por defecto el método doSelectOne() para obtener un objeto, pero se puede utilizar otro método indicándolo en la opción method_for_criteria de la configuración de la ruta:

# apps/frontend/config/routing.yml
job_show_user:
  url:     /job/:company_slug/:location_slug/:id/:position_slug
  class:   sfPropelRoute
  options:
    model: JobeetJob
    type:  object
    method_for_criteria: doSelectActive
  param:   { module: job, action: show }
  requirements:
    id: \d+
    sf_method: [GET]

El método doSelectActive() recibe como argumento el objeto Criteria construido por la ruta:

// lib/model/JobeetJobPeer.php
class JobeetJobPeer extends BaseJobeetJobPeer
{
  static public function doSelectActive(Criteria $criteria)
  {
    $criteria->add(JobeetJobPeer::EXPIRES_AT, time(), Criteria::GREATER_THAN);

    return self::doSelectOne($criteria);
  }

  // ...
}

Si intentas acceder ahora a la página de una oferta de trabajo expirada, serás redirigido a una página de error 404.

Error 404 que se muestra al acceder a la página de una oferta de trabajo expirada

Figura 6.4 Error 404 que se muestra al acceder a la página de una oferta de trabajo expirada