2014-09-10 42 views
0

我需要級別的訪問權限添加到我的網站 我通常如下代碼我的路線:Laravel 4路由等級接入

Route::get('/', array(
    'as' => 'home-view', 
    'uses' => '[email protected]' 
)); 

/* Authenticated Group */ 
Route::group(array('before' => 'auth'), function(){ 
    Route::get('/', array(
     'as' => 'admin-view', 
     'uses' => '[email protected]' 
    )); 
} 
/* Unauthenticated Group */ 
Route::group(array('before' => 'guest'), function(){ 
    Route::get('/signin', array(
     'as' => 'user-signin-get', 
     'uses' => '[email protected]' 
    )); 
} 

我需要添加級別的訪問權限爲「用戶」或「管理員」。我怎麼能做到這個過濾路線?像正常一樣簡單,或者你推薦什麼?

+0

我建議你Laravel文檔中有關路由過濾讀了起來:http://laravel.com/docs/routing#route-filters – 2014-09-11 12:10:11

回答

1

只要您願意,您可以爲單一路線設置多個過濾器。試想一下:

Route::group(array('before' => 'auth|hasAdminLevel'), function(){ 
    Route::get('/', array(
     'as' => 'admin-view', 
     'uses' => '[email protected]' 
    )); 
}); 

這將同時應用auth還有hasAdminLevel過濾器,你admin-view路線。 hasAdminLevel路由是您需要定義的custom filter

更新

hasAdminLevel是一個自定義過濾器,並且可以這樣定義:

Route::filter('hasAdminLevel', function() { 
    if(Auth::user()->level != 'admin') { 
     return Redirect::to('/'); 
    } 
}); 

你的地方,這是一個有點給你,但一個好地方將在恰當地命名爲app/filters.php

0

我會認爲u有一個用戶(ID,用戶名等),角色(ID,姓名等),並USER_ROLE(USER_ID,ROLE_ID等)表和關係的正確設置在你的模型中。

因此,您可以在用戶模型中創建一個新函數來檢查用戶是否有角色。

public function hasRole($name) { 
    foreach ($this->roles as $role) { 
     if ($role->name == $name) return true; 
    } 
    return false; 
} 

然後你可以創建一個過濾器:

Route::filter('role', function($route, $request, $role){ 
if(Auth::guest() or !Auth::user()->hasRole($role)) { 
    return Redirect::guest('/'); // whatever you want 
} 

});

最後只是將過濾器應用於您的路線:

Route::group(['prefix' => 'admin', 'before' => 'role:the_role_name_you_want'], function(){ 
    // Your Routes here 
});