在我的Symfony 2项目中,我有一个页面显示有关实体的信息。在这个页面上还有一个指向与这个实体关联的文件的链接。确保Symfony 2中的下载链接
页面是安全的,只有在用户是特定角色时才能显示。预期的角色对于每个实体都不相同,因此它在动作中进行了动态测试。
我的问题是即使页面是安全的,任何人都可以通过它的URL访问文件。只有当角色与页面显示的角色相匹配时,我才希望它可以下载。
任何有关我应该怎么做,或从哪里开始寻找的建议?
在我的Symfony 2项目中,我有一个页面显示有关实体的信息。在这个页面上还有一个指向与这个实体关联的文件的链接。确保Symfony 2中的下载链接
页面是安全的,只有在用户是特定角色时才能显示。预期的角色对于每个实体都不相同,因此它在动作中进行了动态测试。
我的问题是即使页面是安全的,任何人都可以通过它的URL访问文件。只有当角色与页面显示的角色相匹配时,我才希望它可以下载。
任何有关我应该怎么做,或从哪里开始寻找的建议?
将文件移动到公共目录之外,因此无法通过URL访问该文件。在控制器中,如果用户拥有正确的权限,则允许用户下载该文件。
你可以在你的控制器使用:
$headers = array('Content-Type' => 'application/pdf',
'Content-Disposition' => 'inline; filename="file1.pdf"');
return new Response(file_get_contents($file), 200, $headers);
谢谢我在发布这个问题几个小时后也想到了这个实现。感谢无论如何,它肯定是最好的方式来做到这一点! – skwi 2012-03-30 14:00:05
上述代码的一种改进是使用StreamedResponse将内容作为正文SF 2.1的一部分输出:http://symfony.com/doc/current/components/http_foundation.html#streaming-a-response – Josiah 2012-04-01 13:52:47
您应该始终使用它,因为使用上面的代码需要具有与$ file文件大小一样多的内存 – 2017-10-23 10:24:28
移动文件的Web根目录之外,然后将其发送到使用'ReadFile的()'的用户,如果他们符合安全要求下载文件。 – halfer 2012-03-30 08:50:49