微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Laravel 7.x Middlewarecan:gatename它实际上阻止每个人访问特定页面我做错了什么?

如何解决Laravel 7.x Middlewarecan:gatename它实际上阻止每个人访问特定页面我做错了什么?

我尝试制作一个具有管理员,销售和用户权限的授权功能角色。我制定了几个门规则。到目前为止,我做到了。

应用程序\用户

public function Roles()
{
    return $this->belongsToMany('App\Role');
}

public function hasAnyRoles($roles)
{
if ($this->roles()->whereIn('name',$roles)->first()) {
        return true;
    }
        return false;

}

UsersController

public function index()
{
    $users= User::all();
    return view('admin.users.index')->with('users',$users);
}and the other user's role as well.

AuthServiceProvider

Gate::define('manageUsers',function($user){
    return $user->hasAnyRoles(['admin,sales']);
});

路线\网络

Route::namespace('Admin')->prefix('admin')->name('admin.')->middleware('can:manageUsers')->group(function(){

    Route::resource('/users','UsersController',['except' =>['show','store','create']]);
});

这就是问题

->中间件('can:manageUsers')

将其放入路由后,我无法访问 admin.users.index.PHP ,我想并且想踢除admin和来自 admin.users.index.PHP

但不是我的想法,它实际上使所有人都从 admin.users.index.PHP

退出

帮助!如何使管理员和销售角色可以进入 admin.users.index.PHP

解决方法

在门定义中,您拥有

Gate::define('manageUsers',function($user){
   return $user->hasAnyRoles(['admin,sales']); //array contains one value 'admin,sales' theres no role like that
});

应该是

Gate::define('manageUsers',function($user){
  return $user->hasAnyRoles(['admin','sales']); //array listed with 2 items. 
});

由于您的登门检查当前正在检查用户是否具有“管理员,销售”角色,因此该检查将返回false。当然,来自belongsToMany的假设是您的用户将具有许多角色,并且每个单独的角色(例如“ admin”和“ sales”)都通过belongsToMany关系附加到该用户

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。