Laravel 4路线接入

时间:2014-09-10 16:45:46

标签: php laravel laravel-4 laravel-routing access-levels

我需要为我的网站添加级别访问权限 我通常编写我的路线,如:

Route::get('/', array(
    'as' => 'home-view',
    'uses' => 'HomeController@viewHome'
));

/* Authenticated Group */
Route::group(array('before' => 'auth'), function(){
    Route::get('/', array(
        'as' => 'admin-view',
        'uses' => 'AdminController@viewAdmin'
    ));
}
/* Unauthenticated Group */
Route::group(array('before' => 'guest'), function(){
    Route::get('/signin', array(
        'as' => 'user-signin-get',
        'uses' => 'UserController@getSignIn'
    ));
}

我需要添加级别访问权限" user"或" admin"。我怎么能做那个过滤路线?尽可能简单或者你推荐什么?

2 个答案:

答案 0 :(得分:1)

您可以根据需要为单个路径添加尽可能多的过滤器。考虑一下:

Route::group(array('before' => 'auth|hasAdminLevel'), function(){
    Route::get('/', array(
        'as' => 'admin-view',
        'uses' => 'AdminController@viewAdmin'
    ));
});

这会将authhasAdminLevel过滤器同时应用于您的admin-view路由。 hasAdminLevel路线是您需要定义的custom filter

<强>更新

hasAdminLevel是一个自定义过滤器,可以这样定义:

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

你放置的地方有点取决于你,但一个好地方就是恰当地命名为app/filters.php

答案 1 :(得分:0)

我会假设您有用户(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
});