我已经开始学习 Laravel 5.1,到目前为止我很喜欢它!但是有一件事我还没有得到。
在我之前的项目中,我有 2 个特定的控制器(例如:“正常”、“扩展”),在成功登录后,它们会根据user_group
数据库中的用户被调用。
如果“Foo.Bar”输入他的有效凭据并拥有normal
他被重定向到的组NormalControler
。$_SESSION
因为我没有使用任何框架,所以我通过设置一个组并检查它来限制对另一个组的访问。因此,如果另一个组试图访问该控制器,他就会被重定向。
这在 Laravel 5 中如何实现?到目前为止,我有一个控制器,它可以在没有身份验证的情况下调用,并且受以下代码限制routes.php
:
// All routes in the group are protected, only authed user are allowed to access them
Route::group(array('before' => 'auth'), function() {
// TO-DO : Seperate Controller access
});
登录如下所示:
public function performLogin()
{
$logindata = array(
'username' => Input::get('user_name'),
'password' => Input::get('user_pass')
);
if( Auth::attempt( $logindata ) ){
// return \Redirect::to( check group and access this controller based on it);
}
else {
// TO-DO : Redirect back and show error message
dd('Login failed!');
}
}
-----编辑-----
我已经按照您的建议运行了 artisan 命令并制作了这个中间件:
namespace App\Http\Middleware;
use Closure;
use Request;
class GroupPermissions
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next, $group)
{
// Check User Group Permissions
if( $request->user()->group === $group ){
// Continue the request
return $next($request);
}
// Redirect
return redirect('restricted');
}
}
并将这一行编辑Kernel.php
成$routeMiddleware
:
'group.perm' => \App\Http\Middleware\GroupPermissions::class
到目前为止,我认为这是正确的,如果我错了,请纠正我!然后我可以做这样的事情来限制控制器吗?
Route::group(array('before' => 'auth'), function() {
Route::group( ['middleware' => 'group.perm', 'group' => 'normal'], function(){
Route::get('/normal/index', 'DummyNormalController@index');
});
Route::group( ['middleware' => 'group.perm', 'group' => 'extended'], function(){
Route::get('/extended/index', 'DummyExtendedController@index');
});
});