如何使用php yii框架限制某些用户和公众访问上传的文件

时间:2014-11-06 06:24:36

标签: php file-upload yii privileges yii-extensions

我使用Yii创建了一个php应用程序。它有用户,公共和管理模块。

在文件上传中,用户应该能够设置访问权限(例如公共,私人,特定组等)。

我想限制人们通过网址访问文件。

  • 我该如何解决这个问题?

  • Yii是否为此提供了任何构建机制?

1 个答案:

答案 0 :(得分: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;
}

示例网址,具体取决于您的首选设置:

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