Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 具有Laravel权限的Laravel角色_Php_Laravel_Authentication_Permissions - Fatal编程技术网

Php 具有Laravel权限的Laravel角色

Php 具有Laravel权限的Laravel角色,php,laravel,authentication,permissions,Php,Laravel,Authentication,Permissions,我正在使用这个软件包。我创建了两个角色,admin和user,并将admin角色与权限Access CMS关联。我还创建了两个用户,一个是admin角色,另一个是user角色 我已将所有admin路由放在adminiddleware后面: Route::group(['prefix' => 'admin', 'middleware' => ['auth', 'isAdmin']], function() { // Routes } 中间件来自: 这适用于具有admin角色的用户

我正在使用这个软件包。我创建了两个角色,
admin
user
,并将
admin
角色与权限
Access CMS
关联。我还创建了两个用户,一个是
admin
角色,另一个是
user
角色

我已将所有
admin
路由放在
adminiddleware
后面:

Route::group(['prefix' => 'admin', 'middleware' => ['auth', 'isAdmin']], function() {
  // Routes
}
中间件来自:


这适用于具有
admin
角色的用户。问题是,当我与其他用户一起登录时,它会死掉,但用户仍保持登录状态。也就是说,如果我在这次尝试后回显
Auth::user()
,它将显示非
admin
用户。我所期望的是,它可以阻止用户登录。我错过了什么?

可能不是最好的选择,但你可以试试

Auth::logout()


然后在用户注销后将其返回主页。

您缺少先执行
auth
中间件的信息。中间件按照它们在数组中声明的顺序执行。


要实现完全不登录,您必须更改中间件的顺序,但您将无法再使用
Auth::user()
,因为用户将无法进行身份验证。因此,要在没有
Auth::user()
的情况下执行此操作,您必须自己查询数据库以查找用户对象,然后检查权限。但不建议这样做。为什么用户是否经过身份验证很重要?

如果用户没有该路由的权限,为什么要记录用户的身份验证?在我看来,将该用户重定向到某个页面并显示一个他没有访问权限的错误更符合逻辑:
return redirect()->route('home')->withErrors['No access']
我的观点是,当它点击该中间件时,用户已经登录了。如果我将
return
语句放在中间件中,用户仍然会登录。为什么不建议找到用户对象,然后检查权限?我还能怎么检查许可证呢?
public function handle($request, Closure $next)
{
    if (!Auth::user()->hasPermissionTo('Access CMS')) {
        die('aargh');
    }

    return $next($request);
}