我需要为我的网站添加级别访问权限 我通常编写我的路线,如:
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"。我怎么能做那个过滤路线?尽可能简单或者你推荐什么?
答案 0 :(得分:1)
您可以根据需要为单个路径添加尽可能多的过滤器。考虑一下:
Route::group(array('before' => 'auth|hasAdminLevel'), function(){
Route::get('/', array(
'as' => 'admin-view',
'uses' => 'AdminController@viewAdmin'
));
});
这会将auth
和hasAdminLevel
过滤器同时应用于您的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
});