我正在使用laravel-permission包。我创建了2个角色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
角色的用户。问题是,当我与其他用户登录时,它die
(应该),但用户仍然登录。如果我在此次尝试后回显Auth::user()
,则会显示非admin
用户。我期待的是它可以防止用户完全登录。我错过了什么?
答案 0 :(得分:0)
可能不是最好的选择,但你可以试试。
Auth::logout();
然后在用户退出后将其返回主页。
答案 1 :(得分:0)
您缺少首先执行auth
中间件。中间件按照它们在数组中声明的顺序执行。
routing groups
要实现根本不登录,您必须更改中间件的顺序,但由于用户不会被初始化,您将无法再使用Auth::user()
。因此,要在没有Auth::user()
的情况下执行此操作,您必须自己查询数据库以查找用户对象,然后检查权限。不建议这样做。为什么用户是否被刷新是完全重要的?