【问题标题】:Symfony secure folder with assets带有资产的 Symfony 安全文件夹
【发布时间】:2015-06-30 20:14:29
【问题描述】:

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

想象一下文件夹结构:

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

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

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

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

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

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

【问题讨论】:

  • 您发布的教程非常过时 - 将近 6 年了。它使用控制器来管理文件,但如果存在的话,我正在寻找更简单的解决方案。感谢您的帮助。

标签: php security symfony


【解决方案1】:

查看静态文件时不会调用 Symfony(或任何其他 PHP 脚本)。它仅在您的前端控制器被击中时调用(app.php)。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-03-25
      • 1970-01-01
      • 1970-01-01
      • 2019-06-22
      • 2020-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多