【发布时间】:2015-07-16 06:53:11
【问题描述】:
我已经开始学习 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');
});
});
【问题讨论】:
-
中间件应该这样做。我认为
-
正如其他人所说,中间件现在会这样做 - mattstauffer.co/blog/series/new-features-in-laravel-5.0
标签: php laravel model-view-controller laravel-5.1