如何保护文件不被未登录到Yii2项目的任何人下载


how would you protect a file from being downloaded by anyone not logged in on a Yii2 project?

基本上,我使用的是标准的Yii2设置。我有一个登录,允许用户看到链接到文件。文件在下载文件夹中。但是,只有当用户是"非访客"时,才能看到看到链接的页面。现在,如果有人只是将链接复制给其他人,其他人就可以在没有登录的情况下下载该文件。有问题的文件并不是"付费"的,但由于服务条款和其他法律,我要求人们在允许下载它们之前登录。我可以通过php动态创建下载链接吗?至少检查"isGuest",如果isGuest = True,则重定向到登录页面。除了直接下载链接,我该怎么做呢?

您可以使用AccessControl类为特定角色或用户提供对特定操作的访问。

你可以这样做:

class DownloadController extends Controller
{
    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'allow' => false,
                        'actions' => ['download'],
                        'roles' => ['?'],
                    ],
                ],
            ],
        ];
    }
    // ...
}

'?' Role为guest用户。

您可以在控制器的操作中添加一个检查来验证用户是否登录,使用:

Yii::$app->user->getIsGuest();

查看文档了解更多细节:Yii2 web user

禁止任何人直接下载文件。您可以使用htaccess或将下载文件夹放入受保护的文件夹中。现在您需要在控制器中执行下载操作,用于检查用户是guest还是已登录。如果可以,只需将文件从您的文件系统传递到用户浏览器。PHPS readfile可以帮到你