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

0

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

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

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

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

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

Теги:
file-upload
yii
yii-extensions
privileges

1 ответ

1

Чтобы кто-либо не обращался к файлам в папке uploads, поместите файл .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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню