Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 4路线级通道_Php_Laravel_Laravel 4_Laravel Routing_Access Levels - Fatal编程技术网

Php Laravel 4路线级通道

Php Laravel 4路线级通道,php,laravel,laravel-4,laravel-routing,access-levels,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

我需要为我的网站添加级别访问权限 我通常会对我的路线编码如下:

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'
    ));
}

我需要添加“用户”或“管理员”级别的访问权限。我怎样才能做到过滤路线?尽可能简单,或者您推荐什么?

您可以在一条路由上设置任意多个筛选器。考虑这一点:

Route::group(array('before' => 'auth|hasAdminLevel'), function(){
    Route::get('/', array(
        'as' => 'admin-view',
        'uses' => 'AdminController@viewAdmin'
    ));
});
这将对您的
管理员视图
路由应用
auth
以及
hasAdminLevel
过滤器。
hasAdminLevel
路由是需要定义的路由

更新

hasAdminLevel
是一个自定义筛选器,可以这样定义:

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

你把它放在哪里取决于你自己,但是一个好的地方应该是恰当命名的
app/filters.php

我假设你有一个用户(id、用户名等)、角色(id、名称等)和用户角色(用户id、角色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
});

我建议您阅读Laravel文档中的路由过滤器: