Laravel 7.x Middleware(can:gatename) 它实际上阻止每个人访问某个页面。我做错啥了?
Posted
技术标签:
【中文标题】Laravel 7.x Middleware(can:gatename) 它实际上阻止每个人访问某个页面。我做错啥了?【英文标题】:Laravel 7.x Middleware(can:gatename) it actually prevent everyone to access a certain page. What did i do wrong?Laravel 7.x Middleware(can:gatename) 它实际上阻止每个人访问某个页面。我做错什么了? 【发布时间】:2020-09-02 03:22:22 【问题描述】:我尝试创建一个包含管理员、销售和用户的授权功能角色。我制定了几条登机规则。到目前为止,我已经做到了。
应用\用户
public function Roles()
return $this->belongsToMany('App\Role');
public function hasAnyRoles($roles)
if ($this->roles()->whereIn('name', $roles)->first())
return true;
return false;
用户控制器
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.users.index.php
但与我想的不同,它实际上将所有人从 admin.users.index.php
中踢了出去帮助!如何让管理员和销售角色可以进入admin.users.index.php?
【问题讨论】:
【参考方案1】:在你的门定义中,你有
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.
);
由于您的登机口检查当前正在检查用户是否具有名为“admin, sales”的角色,因此检查将返回 false。当然,belongsToMany 的假设是您的用户将拥有许多角色,并且每个单独的角色(例如“admin”和“sales”)都通过 belongsToMany 关系附加到用户
【讨论】:
很高兴我能帮上忙以上是关于Laravel 7.x Middleware(can:gatename) 它实际上阻止每个人访问某个页面。我做错啥了?的主要内容,如果未能解决你的问题,请参考以下文章