2013-03-18 75 views
1

我在做我的項目上傳圖像功能。這裏我將文件保存在公共文件夾(public/img/myfiles /)中。我要限制的文件訪問,如果管理員用戶沒有登錄。(即)Laravel - 保護從網絡訪問圖像文件夾

如果我把URL像

https://domain/img/myfiles/filename.jpg 

它應該重定向到登錄頁面

https://domain/login 

如何要做到這一點?我不想限制特定的圖像關聯的用戶。由於用戶是管理員,我想讓他們完全訪問圖像文件夾。

+0

我認爲你將不得不使用'.htaccess'要做到這一點,也許這可以幫助你:HTTP:// stackoverflow.com/questions/5664611/protect-a-folder-by-htaccess-rewriterule-to-php – Adrenaxus 2013-03-18 11:13:57

+0

這是一個替代解決方案,無需改變.htaccess中的任何內容,換句話說就是100%基於Laravel的解決方案,這適用於Laravel 5.x和更新。 http://stackoverflow.com/questions/30682421/how-to-protect-image-from-public-view-in-laravel-5/30682456#30682456 – 2016-02-29 12:41:06

回答

2

您可以嘗試在您的.htaccess文件中放置一行,通過PHP腳本路由圖像的所有請求,該腳本只是重定向到登錄頁面(如果不是admin),否則返回請求的圖像。這是想法它可能看起來。

.htaccess文件:

RewriteRule ^img/myfiles/(\w+)\.([a-z]{3,4})$ image.php?name=$1&type=$2 [L] 

image.php文件:

if(Auth::user()->role == 'admin') { 
    header("Content-type: image/" + $_SESSION['type']); 
    readfile("/path/to/image/" + $_SESSION['name'] + '.' + $_SESSION['type']); 
else { 
    header("Location: http://mysite.com/login"); 
} 
+0

請注意,這可能,如在這個例子中所寫,打開管理員可以利用的安全漏洞。 – BenjaminRH 2013-03-18 11:28:41

+0

謝謝你的回覆..我會試試這個。但有沒有辦法通過路由過濾器來做到這一點?像Route :: get('img/myfiles',array( 'before'=>'auth' )); – viji 2013-03-18 11:28:57

+0

@viji如果你可以用Laravel做到這一點,我不確定我的頭頂是什麼,但我認爲它可能在'.htaccess'中更安全。 – BenjaminRH 2013-03-18 11:31:16