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文档中的路由过滤器: