Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 禁止在没有RBAC权限的情况下直接访问png或pdf文件_Php_Yii2_Apache2 - Fatal编程技术网

Php 禁止在没有RBAC权限的情况下直接访问png或pdf文件

Php 禁止在没有RBAC权限的情况下直接访问png或pdf文件,php,yii2,apache2,Php,Yii2,Apache2,我正在使用Yii2和witget()来访问controll,当用户登录时,他可以看到所有图像,这是确定的,但如果不登录,我需要直接使用外部url阻止所有访问 比如说 http://examplesite.com/web/files/example.jpg 如果用户未登录,他将看不到该图像 我试过使用“.htacces”,但我发现没有任何效果 我使用PHP 7,Apache over linux作为一种简单的方法,您可以通过在视图文件中实现以下代码来检查用户是否登录: <div>

我正在使用Yii2和witget()来访问controll,当用户登录时,他可以看到所有图像,这是确定的,但如果不登录,我需要直接使用外部url阻止所有访问

比如说 http://examplesite.com/web/files/example.jpg

如果用户未登录,他将看不到该图像

我试过使用“.htacces”,但我发现没有任何效果


我使用PHP 7,Apache over linux作为一种简单的方法,您可以通过在视图文件中实现以下代码来检查用户是否登录:

<div>
     <? if(\Yii::$app->user->isGuest()):?>
         <!--Display image for Guests-->
     <? elseif:>
         <!--Images for users-->
     <? endif; ?>
</div>
通过这种方式,您可以通过应用程序传递所有图像。但是那些需要通过逻辑给出的内容应该存储在外部无法访问的地方,或者由页面通过特定路径请求,例如:图像。 所有图像都在web/img中,可直接从Apache获得,对于具有逻辑的图像,请使用:

Url::to(['images/get-images', 'imgPath => 'img/logo.png'])

// urlManager rule 
[
    'pattern'=>'get-img/<imgPath>', 
    'route'=>'images/get-images'
],
Url::to(['images/get images','imgPath=>'img/logo.png']))
//urlManager规则
[
“模式”=>“get-img/”,
“路由”=>“图像/获取图像”
],

希望它会有所帮助。

作为一种简单的方法,您可以通过在视图中实现此代码来检查用户是否登录了文件:

<div>
     <? if(\Yii::$app->user->isGuest()):?>
         <!--Display image for Guests-->
     <? elseif:>
         <!--Images for users-->
     <? endif; ?>
</div>
通过这种方式,您可以通过应用程序传递所有图像。但是那些需要通过逻辑给出的内容应该存储在外部无法访问的地方,或者由页面通过特定路径请求,例如:图像。 所有图像都在web/img中,可直接从Apache获得,对于具有逻辑的图像,请使用:

Url::to(['images/get-images', 'imgPath => 'img/logo.png'])

// urlManager rule 
[
    'pattern'=>'get-img/<imgPath>', 
    'route'=>'images/get-images'
],
Url::to(['images/get images','imgPath=>'img/logo.png']))
//urlManager规则
[
“模式”=>“get-img/”,
“路由”=>“图像/获取图像”
],

希望这会有所帮助。

您不能阻止访客用户通过直接链接查看图像。如果在.htaccess中阻止图像,则登录的用户将无法查看这些图像

您可以通过PHP实现对图像的访问: 1.图像URL看起来像/images/some\u散列 2.应用程序应捕获对/images/*的所有请求 3.应用程序检查每个请求中的访问权限
4.若允许访问,应用程序将读取一个图像文件并给出响应(带有正确的标题)。您应该实现(1)中的真实图像和散列之间的映射。

您不能阻止来宾用户通过直接链接查看图像。如果在.htaccess中阻止图像,则登录的用户将无法查看这些图像

您可以通过PHP实现对图像的访问: 1.图像URL看起来像/images/some\u散列 2.应用程序应捕获对/images/*的所有请求 3.应用程序检查每个请求中的访问权限
4.若允许访问,应用程序将读取一个图像文件并给出响应(带有正确的标题)。您应该实现(1)中的真实图像和散列之间的映射。

我认为,就像一个选项一样,您可以看看实现一个控制操作来返回图像。并将访问控制行为添加到此操作中。我认为,与选项一样,您可以查看实现控制操作以返回图像。并在此操作中添加访问控制行为。他需要阻止未注册用户访问某种类型的文件或文件的原因,以便他们无法共享此链接,甚至是哈希链接。像“abc.com/hash123”这样的链接仍然可以被任何知道它的人打开。这就是为什么他需要阻止未注册用户访问某些类型的文件或文件,这样他们就不能共享此链接,即使是哈希链接。像“abc.com/hash123”这样的链接仍然可以被任何知道它的人打开。不必从文件夹中移动所有文件,因为我在“web/uploads/”上有我的所有图像,只是我添加了这个规则。RedirectMatch 403^/lmyproject/web/uploads/*$谢谢Serghei Leonenco。这只是图像位置的示例。没有必要从文件夹中移动所有文件,因为我将所有图像都放在“web/uploads/”上的文件夹中。我刚刚添加了此规则。RedirectMatch 403^/lmyproject/web/uploads/*$谢谢Serghei Leonenco。这只是图像位置的示例。