2013-04-28 104 views
0

我正在設計一個網站,只有登錄的用戶才能訪問網站的某些部分的內容。那麼以下哪種方法更安全並且是行業標準?限制訪問Laravel的最佳方式是什麼?

方法1:檢查,如果用戶登錄並做類似的觀點如下:

@if (Auth::check()) 
    // content for logged in user 
@else 
    // Access restricted warning message for guests 
@endif 

方法2:使用路由技術

Route::get('study',array('before'=>'auth','uses'=>'[email protected]')); 

而且沒有點同時使用這兩種技術,對嗎?

+0

喜拉雅。只是你知道,社區認爲Stack Overflow的問題標題[沒有標籤更好](http://meta.stackoverflow.com/search?q=tags+in+titles)。 – halfer 2013-04-28 12:41:15

回答

0

兩者都是安全的,可以互補使用。

博客例如:

在路線

// Secure the edit post 
Route::get('blog/edit',array('before'=>'auth','uses'=>'[email protected]')); 
// Display a post 
Route::get('blog/read/{id}', '[email protected]')); 

在 '顯示文章' 觀點:

@if (Auth::check()) 
    // display edit link 
@endif 
2

在這種情況下最肯定使用過濾器,這正是他們的目的是什麼對於。

您可能遇到的下一個粒度級別將根據登錄用戶的權限限制對crud操作的訪問。在這種情況下,考慮使用某種類型的RBAC實現的過濾器,有一個稱爲Authority的偉大捆綁軟件可以幫助您做到這一點。

另外不要忘記,最好的做法是返回,當用戶被拒絕從一個過濾器,而不是200

除此之外訪問,你可能會得到進入嵌套不同的內容到你的意見403基於登錄用戶的權限,因爲我通常會發現RBAC和視圖作曲家的組合工作得很好。

不要忘記,你可以在控制器的構造函數以及路由級別應用過濾器,我經常發現這是更一致和可靠的,但都是好方法。

http://www.laravel.com/docs/controllers#action-filters

3

使用過濾器在你的路由器。 由於codenamegary建議,請使用過濾器。這是常見的做法,非常明確。

過濾器例如:

Route::group(array('before' => 'auth'), function() 
{ 
    Route::controller('backend.index'); 
    Route::controller('backend.dashboard'); 
} 

和過濾器定義:

Route::filter('auth', function() 
{ 
    if (Auth::guest()) return Redirect::to('login'); 
}); 
相關問題