Как ограничить доступ некоторых пользователей и общественности к загруженным файлам с помощью фреймворка php yii

Я создал приложение php, используя Yii. Он имеет пользовательские, публичные и административные модули.

При загрузке файла пользователь должен иметь возможность устанавливать права доступа (например, общедоступный, частный, определенная группа и т. Д.).

Я хочу ограничить доступ людей к файлам через URL.

  • Как я могу решить эту проблему?

  • Предоставляет ли Yii какой-либо встроенный механизм для этого?

0

Решение

Чтобы никто не мог получить доступ к файлам в папке загрузки, поместите .htaccess файл внутри:

deny from all

Затем, чтобы позволить определенным пользователям доступ к файлу, создайте действие контроллера:

private function actionDownload($fileId) {
$file = File::model()->findByPk(fileId);
$filePath = Yii::app()->basePath.'/../uploads/'.$file->filename;

// Check user permissions
if($file->permissions != 'public' && $file->userId != Yii::app()->user->id)
throw new CHttpException(404, 'This file does not belong to you.');

// Download file to user
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $filePath);
finfo_close($finfo);
$size = filesize($filePath);

header("Content-Type: ".$mime);
header("Content-Length: ".$size);
header("Content-Disposition: attachment; filename=\"".$fileName."\"");
readfile($filePath);

exit;
}

Примеры URL, в зависимости от вашей предпочтительной настройки:

http://example.com/download/1
http://example.com/site/download/1
http://example.com/site/download?fileId=1
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]