2014-02-26 15 views
3

我讀過公用文件夾中的文件可以通過Laravel中的Web瀏覽器訪問。當我輸入公共文件夾中文件的路徑時,除非我在路徑中定義路徑,否則我沒有看到該文件。受控訪問laravel-4中的分類文件

我正在製作一個下載頁面,以便用戶可以通過一個從下載加密/分類的材料。

我不希望用戶能夠以除下載表單或其他受控方法之外的任何其他方式訪問文件。

我是否需要創建讓我們說一個私人文件夾,並存儲他們的文件。如果我這樣做,我還能訪問後端的文件嗎?

還是公共文件夾中的文件不可訪問,除非路由定義?如果這是正確的,我可以將這些文件存儲在公共目錄下嗎?

回答

10

任何人都可以訪問公共文件夾下的文件,除非您的網絡服務器將策略設置爲特定的目錄。

如果您目前無法訪問文件在公共文件夾是因爲,也許,你是不是正確輸入網址,即:

的文件中

/var/www/myapp/public/img/logo.png 

威爾是通過訪問:

http://myapp.com/img/logo.png 

請注意,您的文件夾的公共部分是沒有出現在您的網址僅當您的網絡服務器配置正確,並且您的.htaccess文件已準備就緒並且能夠重寫您的URL。

對於敏感的文件,你所能做的就是將它們存儲INSITE您的應用程序文件夾(或外部公開的任何其他文件夾),其中,只是你的應用程序將有機會獲得,這樣的事情就可以OK:

/var/www/myapp/app/storage/<create a new folder here> 

然後,是的,創建一個路由閱讀並出示您的安全文件:

Route::get('readfile/{fileName}', ['before' => 'auth', 'use' => '[email protected]']); 

過濾'before' => 'auth'將保證一個未經過身份驗證將永遠無法訪問文件。

在你的控制器,你可以做這樣的事情,以檢查是否可以看到一個文件:

class ReadFileController extends Controller { 

    public function read($fileName) 
    { 
     if(Auth::user()->id == 1) // of course this is not a good way, just an example 
     { 
      return $this->getFile($fileName); 
     } 
     else 
     { 
      return Response::make(null, 403); // forbidden 
     } 
    } 

    private function getFile($fileName) 
    { 
     ... 
    } 

} 
+0

TY這會清除一些東西。只是爲了澄清,當你說「... web服務器正確配置...」你的意思是正確配置,以支持不需要輸入公共。沒有正確配置一般? 此外,身份驗證只是允許某些用戶使用該路徑來訪問任何文件,或者是每個文件/目錄的身份驗證,我的意思是如果用戶想要他們可以鍵入一個路徑來查看一個文件,當他們應該只能看另一個文件。 –

+0

配置爲指向公開並重寫URL並從中刪除index.php。如果它被正確配置,這是你如何訪問一個文件,其他人也可以。剛剛編輯回答你的第二個問題。 –

0

此外,您還可以使用身份驗證「middelware」在你的路由添加更好的訪問控制。

Route::get('routeName', ['middleware' => 'auth', 'uses' =>'[email protected]']);