2014-04-21 21 views
0

假設我想創建一個應用程序,用戶可以將私人文件上傳到基於laravel的網站。我不想讓他們的文件公開,但我希望他們能夠在登錄後下載文件。Laravel - 使用身份驗證限制某些下載

因此,我需要驗證他們是否已經登錄,並且他們有正確的帳戶ID來下載特定的文件。我如何創建這個限制?

我一直在尋找http://laravel.com/docs沒有成功,並與谷歌搜索我只能夠獲得一些香草PHP樣本,但它似乎混亂融入laravel,你會推薦我這樣做?

我可能在我頭腦中過度複雜的情況下,也許我可以使用帳戶ID和文件路徑在數據庫中創建一個表,並使用Response :: download($ pathToFile); 並使用.htaccess限制上傳的文件文件夾不允許?

(假設laravels響應::下載方法旁路.htaccess) 但即使這項工作,它可能是最好的找到一種方法來做到這一點,沒有.htaccess思想?

編輯 我想我只是將文件存儲在數據庫中作爲blob,並從那裏加載它。這樣我就可以輕鬆地進行授權驗證。

回答

0

您可以限制訪問下載使用基於過濾器模式

Route::filter('download', function() 
{ 
    //here you check if the user is logged in 
    if(!Auth::check()){ 
     return 'you should be logged in to access the download page'; 
    } 
}); 

Route::when('download/*', 'download'); 

檢查documentation更多細節

+0

是的我知道如何限制頁面,但不是文件,如何限制文件?所以只有用戶可以查看等myphoto.png或myarchive.zip?那個特定文件的公共URL鏈接僅適用於該用戶? – user2551614

+0

好吧,我不知道是否有辦法用laravel來做到這一點。您可以通過禁用Web服務器中的直接文件訪問來限制對文件的訪問。如果你正在使用Apache看看這個:http://stackoverflow.com/questions/10236717/htaccess-how-to-prevent-a-file-from-direct-url-access –

+0

掩蓋文件dosn't幫助很多情況下,鏈接暴露在安全方面? 也許直接從數據庫保存和加載文件爲blob是唯一的方法呢?在SQL性能方面聽起來有點可怕。 :/ 我也不想依賴.htaccess,所以解決方案在Web服務器上是獨立的。 (等Lighttpd,Nginx)。 – user2551614

5

所有您需要做的僅僅是存儲在私人目錄中的文件(網頁如:/應用程序/文件)並設置正確的標題。

$name = 'name.zip'; 
    $file = '/app/files/name.zip'; 

    $header = array(
     'Content-Type' => 'application/octet-stream', 
     'Content-Disposition' => 'attachment', 
     'Content-lenght' => filesize($file), 
     'filename' => $name, 
    ); 

    // auth code 
    return Response::download($file, $name, $header);