Самый простой способ справиться с этим - использовать 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