Как проверить сессию при загрузке загруженного файла в cakephp? - PullRequest
0 голосов
/ 11 августа 2010

Я создал функцию для загрузки и скачивания файлов на моем сайте. Но я хочу проверить функцию загрузки. Я хочу разрешить пользователю загружать файл, если пользователь уже вошел на мой сайт и получил разрешение на загрузку.

Помоги мне. Как проверить, присутствует ли там сессия или нет? Я загружаю файлы в / app / webroot / documents / users / path.

Ссылка для скачивания сгенерирована так: http://localhost/my_project/documents/users/TGlnaHRob3VzZS5qcGcxMjc3ODIzMTAx.jpg

Спасибо всем.

Ответы [ 3 ]

0 голосов
/ 12 августа 2010

В этом случае ваш контроллер может проверить переменную сеанса перед тем, как разрешить загрузку.
Если вы используете компонент Session, вы можете проверить статус пользователя в действии пользователя, используя что-то вроде этого:

if($this->Session->read('Auth.User.id'))
{
//download file
}

Как вы обслуживаете свои файлы, зависит только от вас, но эта проверка сеанса должна работать внутри того, что вы используете для обслуживания файла, например, AttachmentsController Трэвиса Лелеу.

0 голосов
/ 12 августа 2010

Самый простой способ справиться с этим - использовать AuthComponent для вашей аутентификации и MediaView для обработки запроса на загрузку по ссылке «скачать этот файл» на странице.

Пример.

class SomeController extends AppController {
    ...
    public $components = array(
        'Auth' => array(
            ... auth settings ...
        ),
        ...
    );

    public function download( ){
        $this->view = 'Media';
        $this->set( array(
          'id' => 'TGlnaHRob3VzZS5qcGcxMjc3ODIzMTAx.jpg',
          'name' => 'TGlnaHRob3VzZS5qcGcxMjc3ODIzMTAx',
          'download' => true,
          'extension' => 'jpg',
          'path' => join( DS, array(
              APP, 'webroot', 'documents', 'users', ''
          ))
        ));
    }

Предполагается, что действие загрузки является ограниченным действием в отношении AuthComponent.Если у вас разрешено действие загрузки, вы можете обернуть код MediaView в проверку Auth-> user () следующим образом.

    public function download( ){
        if( $this->Auth->user( )){
            $this->view = 'Media';
            $this->set( array(
              'id' => 'TGlnaHRob3VzZS5qcGcxMjc3ODIzMTAx.jpg',
              'name' => 'TGlnaHRob3VzZS5qcGcxMjc3ODIzMTAx',
              'download' => true,
              'extension' => 'jpg',
              'path' => join( DS, array(
                  APP, 'webroot', 'documents', 'users', ''
              ))
            ));
        } else {
            ... do something else here ...
        }
    }

Это просто проверяет, что Auth имеет действительный объект User, сохраненный в сеансе.Это должно происходить только тогда, когда пользователь вошел в систему.

Пара замечаний:

Я использую пустую запись массива в конце соединения (DS, массив ('path','parts', '') вызов для получения конечной косой черты, необходимой для пути. Делайте это так, как вы хотите - я неравнодушен к присоединению при построении повторяющихся строк или путей.> http://book.cakephp.org/view/563/Setting-Auth-Component-Variables

0 голосов
/ 11 августа 2010

Я бы, наверное, что-то настроил, чтобы вы не давали им прямую ссылку для скачивания. Я обычно устанавливаю AttachmentsController с помощью метода download (). Затем вы можете запустить все проверки прав доступа, которые вы хотите (и сохранить статистику для файлов и т. Д.)

...