Php Symfony2中的私有图像
我的Symfony安装有点问题。在我的应用程序中,用户可以将图像上传到服务器,图像存储在/web/uploads/images中。我希望图像只对登录到应用程序的用户可见 我试图修改安全配置,但没有找到解决问题的正确配置。有什么想法吗Php Symfony2中的私有图像,php,security,symfony,Php,Security,Symfony,我的Symfony安装有点问题。在我的应用程序中,用户可以将图像上传到服务器,图像存储在/web/uploads/images中。我希望图像只对登录到应用程序的用户可见 我试图修改安全配置,但没有找到解决问题的正确配置。有什么想法吗 谢谢:)图片应该位于/web目录之外,否则网站的访问者将始终能够下载它们。例如,您可以创建/private目录并将所有图像上载到该目录 要向用户显示图像,您应该创建一个,其中将包含以下内容(但不相同): 创建扩展后,您应该能够在视图中使用如下内容: {{image\
谢谢:)图片应该位于
/web
目录之外,否则网站的访问者将始终能够下载它们。例如,您可以创建/private
目录并将所有图像上载到该目录
要向用户显示图像,您应该创建一个,其中将包含以下内容(但不相同):
创建扩展后,您应该能够在视图中使用如下内容:
{{image\u private(image.name)}
我还没有找到这方面的捆绑包,所以如果您创建了一些好的解决方案,那么如果您从中创建了一个捆绑包并将其发布到网站上,这可能会很有用。首先,将上载的图像移出web根目录 将文件夹隐藏在可公开访问的web目录中比从非公开位置将文件流式传输给用户要困难得多
第二,创建一个新的路由或控制器,以验证用户对上传图像的访问权限,如果凭据匹配,则直接从控制器操作的非公共文件夹中流式传输文件,并且不返回任何模板。首先非常感谢您花时间回答:)我认为这两种解决方案都是有效的。在我的特殊情况下,我实施了@Patrick提出的解决方案 很快,我将需要通过和url从移动应用程序访问私有图像,因此,出于这个原因,我实现了一个控制器,而不是一个细枝扩展,控制器的代码如下:
<?php
namespace Company\Bundle\nameBundle\Controller;
use Symfony\Component\HttpFoundation\Response,
Symfony\Bundle\FrameworkBundle\Controller\Controller;
class DashPrivateImageController extends Controller
{
public function getImageAction($imagetype, $imagename) {
$securityContext = $this->container->get('security.context');
if ($securityContext->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
if ($imagetype == 1)
$path = $this->get('kernel')->getRootDir() . "/../private/documentFolder1/" . $imagename;
else
$path = $this->get('kernel')->getRootDir() . "/../private/documentFolder2/" . $imagename;
$file = file_get_contents($path);
$headers = array('Content-Type' => 'image/jpeg',
'Content-Disposition' => 'inline; filename="'.$imagename.'"');
return new Response($file, 200, $headers);
} else
return new Response("not found", 404);
}
}
?>
谢谢 我以前也回答过类似的问题。看看这里-如果用户希望在例如
ArticleController
、GalleryController
等中看到图像,该怎么办。?这意味着在每个控制器内都有一个操作
用于显示图像。用Twig extension
解决这个问题是一个更优雅的解决方案。一个Twig extension
不能处理访问控制,这就是我的目标。最好创建一个可以从任何控制器调用的图像验证服务,并使用一个细枝模板来显示图像