Symfony安全文件夹与资产

时间:2015-06-30 20:14:30

标签: php security symfony

我正在尝试使用某些资源(pdf文件等)保护我的Symfony 2.7项目的公用文件夹,因此只有登录用户才能访问它们。

想象一下文件夹结构:

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

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

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

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

但这仅适用于不适用于公用文件夹中文件的路由。

这甚至可能吗?或者我需要制作某种控制器来覆盖我的文件路由,另外还要检查是否允许用户查看文件?

2 个答案:

答案 0 :(得分:3)

查看静态文件时不会调用Symfony(或任何其他PHP脚本)。只有在你的前控制器命中时才会调用它(app.php)。

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

答案 1 :(得分:0)

在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);
  }
}