Как настроить защищенные статические файлы в Kohana 3.1 - PullRequest
1 голос
/ 08 июня 2011

Я использую Kohana 3.1 с включенным модулем ORM / Auth.Я хотел бы предоставлять статические файлы (документы, PDF и т. Д.) Только людям с ролью A в каталоге A_only.

Поскольку файлы .htaccess просто обслуживают URL-адреса, которые он находит напрямую, и не передает ихкроме index.php, я мог бы запретить любой доступ в A_only через .htaccess, но тогда как бы я обслуживал статические файлы в функции контроллера?

Я мог бы также иметь .htaccess в каталоге A_only, которыйтребует аутентификации.Однако это потребует от них повторного входа в систему, даже если я настрою его на поиск в базе данных пользователей / паролей.

1 Ответ

3 голосов
/ 08 июня 2011

Вам нужно указать вашему веб-серверу прекратить обработку статических файлов.Самым простым решением было бы переместить статические файлы за пределы веб-каталога, чтобы Apache не мог их найти;Это заставит этот запрос пройти через Kohana.

Вторая часть - создание контроллера, который обрабатывает разрешения и отправку файлов для вас.В руководстве пользователя Kohana есть довольно хороший пример того, что вам нужно отработать:

Строка 247 Controller_Userguide

// Get the file path from the request
$file = $this->request->param('file');

// Find the file extension
$ext = pathinfo($file, PATHINFO_EXTENSION);

// Remove the extension from the filename
$file = substr($file, 0, -(strlen($ext) + 1));

if ($file = Kohana::find_file('media/guide', $file, $ext))
{
    // Check if the browser sent an "if-none-match: <etag>" header, and tell if the file hasn't changed
    $this->response->check_cache(sha1($this->request->uri()).filemtime($file), $this->request);

    // Send the file content as the response
    $this->response->body(file_get_contents($file));

    // Set the proper headers to allow caching
    $this->response->headers('content-type',  File::mime_by_ext($ext));
    $this->response->headers('last-modified', date('r', filemtime($file)));
}
else
{
    // Return a 404 status
    $this->response->status(404);
}

Главноевам нужно беспокоиться об изменении места, где Kohana ищет файлы:

if ($file = Kohana::find_file('media/guide', $file, $ext))

Остальное - шаблон.

...