检查是否是管理员登录,Laravel

时间:2020-05-15 12:56:24

标签: laravel laravel-7

我有3张桌子:

  • 用户(存储所有用户)
  • 角色(存储所有角色)
  • 角色用户(之间的关系)->(id,role_id,user_id)

如果用户不是admin,我想限制一些路由,但是我不确定如何。

AuthServiceProvider

public function boot()
{
    $this->registerPolicies();

    Gate::before(function ($user, $role) {
        // 
    });
}

web.php

Route::middleware(['can:admin'])->group(function () {
  //
});

2 个答案:

答案 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软件包以获取基于角色的授权和许可。这是一个很棒的软件包。该软件包文档齐全,易于使用。