Suponiendo que tienes algo como lo siguiente en tu BD:

Tabla users:

id (pk) | name
-------------------
1        | juan
2        | pedro

Tabla files:

id (pk) | name
----------------------------
1        | presentacion.pdf
2        | paper.pdf

Tabla files_users:

file_id (pk,fk) | user_id (pk, fk)
-----------------------------------
1                | 1
1                | 2
2                | 1

En tu vista
---------------------
<table>
<tr>
    <td>Presentacion</td>
    <td><?=$html->link('/files/descargar', 'download/1')?></td>
</tr>
<tr>
    <td>Paper</td>
    <td><?=$html->link('/files/descargar', 'download/2')?></td>
</tr>
</table>


En tu controlador
-----------------------

<?php

class FilesController extends AppController
{
    function download($id_file)
    {
        $this->autoRender = false;

        // Acá logica que valida usuario y que el archivo  pertenece
        // Consultas la tabla files_users con el id del archivo y el id del
usuario si lo encuentras buscas el nombre del archivo
        // Si pertenece debes retornar $valid = true; y $name_file = con el
nombre del archivo

        if ($valid)
        {
            $path = "archivos/".$name_file;
            header ("Content-Disposition: attachment;
filename=".$name_file."\n\n");
            header ("Content-Type: application/octet-stream");
            header ("Content-Length: ".filesize($path));
            readfile($path);
        }
    }
}
?>

El 19 de mayo de 2010 07:30, Pau <[email protected]> escribió:

> Hola a todos.
> Necesito que un usuario pueda abrir un documento pdf al pulsar un
> botón, pero necesito hacer unas validaciones de seguridad antes. Por
> lo tanto me gustaría llamar a una función del controller y allí
> validar al usuario y ver que el documento que pide realmente le
> pertenece y si es correcto abrir el documento en otra ventana.
> ¿Alguna idea de cómo se puede hacer esto?
> Saludos y gracias.
> Pau.
>
> --
> Has recibido este mensaje porque estás suscrito al grupo "CakePHP-es" de
> Grupos de Google.
> Para publicar una entrada en este grupo, envía un correo electrónico a
> [email protected].
> Para anular tu suscripción a este grupo, envía un correo electrónico a
> [email protected]<cakephp-es%[email protected]>
> Para tener acceso a más opciones, visita el grupo en
> http://groups.google.com/group/cakephp-es?hl=es.
>
>


-- 
Saludos!
Fabian

-- 
Has recibido este mensaje porque estás suscrito al grupo "CakePHP-es" de Grupos 
de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a 
[email protected].
Para anular tu suscripción a este grupo, envía un correo electrónico a 
[email protected]
Para tener acceso a más opciones, visita el grupo en 
http://groups.google.com/group/cakephp-es?hl=es.

Responder a