我有3张桌子:
如果用户不是admin,我想限制一些路由,但是我不确定如何。
AuthServiceProvider
public function boot()
{
$this->registerPolicies();
Gate::before(function ($user, $role) {
//
});
}
web.php
Route::middleware(['can:admin'])->group(function () {
//
});
答案 0 :(得分:1)
您现在在中间件中使用它的方式,我认为您只需要定义admin
门即可。
在您的AuthServiceProvider
中,尝试执行以下操作:
Gate::define('admin', function ($user) {
return $user->isAdmin();
});
其中$user->isAdmin()
应该替换为确定用户是否为管理员的代码。
因此,假设您有一个名为admin
的角色,则可以执行以下操作:
Gate::define('admin', function ($user) {
return !empty($user->roles()->where('name', 'admin')->first());
});
旁注。根据Laravel约定,您的多对多表应使用单数命名。因此,应命名为role_users
,而不是命名表role_user
。否则,您将必须在每个模型关系中指定名称。
答案 1 :(得分:1)
您可以查看spatie/laravel-permission软件包以获取基于角色的授权和许可。这是一个很棒的软件包。该软件包文档齐全,易于使用。