【发布时间】:2017-06-20 13:25:25
【问题描述】:
我正在使用laravel-permission 包。我创建了两个角色admin 和user,并将admin 角色与权限Access CMS 相关联。我还创建了两个用户,一个具有admin 角色,另一个具有user 角色。
我已将所有admin 路由放在AdminMiddleware 后面:
Route::group(['prefix' => 'admin', 'middleware' => ['auth', 'isAdmin']], function() {
// Routes
}
中间件来自this tutorial:
public function handle($request, Closure $next)
{
if (!Auth::user()->hasPermissionTo('Access CMS')) {
die('aargh');
}
return $next($request);
}
这适用于具有admin 角色的用户。问题是,当我与其他用户一起登录时,它dies(应该如此)但用户仍然处于登录状态。即如果我在此尝试后回显Auth::user(),它将显示非admin 用户。我期待的是它完全阻止该用户登录。我错过了什么?
【问题讨论】:
-
如果用户没有该路由的权限,为什么要记录用户身份验证? IMO 将此用户重定向到某个页面并显示他无权访问的错误会更合乎逻辑:
return redirect()->route('home')->withErrors['No access'] -
我的观点是,当它到达该中间件时,用户已经登录。如果我将
return语句放在中间件中,用户仍然会登录。
标签: php laravel authentication permissions