带有资产的Symfony安全文件夹


Symfony secure folder with assets

我正试图用一些资产(pdf文件等)保护我的Symfony 2.7项目的公共文件夹,这样只有登录的用户才能访问它们。

想象一下文件夹结构:

-- web
    | -- uploads
            | -- public
            | -- secured

我希望每个人(甚至是匿名用户)都能访问web/uploads/public文件夹中的所有文件,但只有注册用户才能访问web/uploads/secured文件夹中的文件。

我已经尝试在access_control:中使用此规则设置security.yml

    - { path: ^/uploads/secured, role: ROLE_USER }

但这只适用于路由,而不适用于我的公用文件夹中的文件。

这可能吗?或者我需要制作某种控制器,它将覆盖我的文件的路由,并额外检查用户是否被允许查看文件?

查看静态文件时不调用

Symfony(或任何其他PHP脚本)。只有当你的前控制器被点击时才会调用(app.php)

使用您的web服务器来确保对资产的访问安全,或者将它们放在公共目录之外,并使用控制器为它们提供服务。

从Symnfony 3.2,您可以将文件存储在非公共路由中。从控制器路由文件,检查权限或您需要的任何内容。然后,您可以使用文件控制器帮助程序来为它们提供服务。

Class FileController extends Controller 
{
  /**
  * @Route("/file/download/{id}", requirements={"id": "'d+"}, name="file_download")
  */
  public function downloadAction($id)
  {
    $file = $this->repository->find($id);
    $path = __DIR__ . '/../../var/files/' . $file->getFilePath . '/' . $file->getFileName();
    return $this->file($path);
  }
}