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);
}