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

检查登录时是否为管理员,Laravel,laravel,laravel-7,Laravel,Laravel 7,我有三张桌子: 用户(存储所有用户) 角色(存储所有角色) 角色用户(之间的关系)->(id、角色id、用户id) 我想限制一些路线,如果用户在不管理,但我不知道如何 AuthServiceProvider public function boot() { $this->registerPolicies(); Gate::before(function ($user, $role) { // }); } web.php Route::mid

我有三张桌子:

  • 用户(存储所有用户)
  • 角色(存储所有角色)
  • 角色用户(之间的关系)->(id、角色id、用户id)
我想限制一些路线,如果用户在不管理,但我不知道如何

AuthServiceProvider

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

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

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

现在在中间件中使用它的方式,我认为您只需要定义
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\u user
,而不是将其命名为
role\u user
。否则,您必须在每个模型关系中指定名称。

现在您在中间件中使用它的方式,我认为您只需定义
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\u user
,而不是将其命名为
role\u user
。否则,您必须在每个模型关系中指定名称。

您可以查看包中基于角色的授权和权限。这是一个很棒的包。此软件包文档丰富,易于使用。

您可以查看该软件包,了解基于角色的授权和权限。这是一个很棒的包。这个软件包有很好的文档记录,并且易于使用。

我已经创建了我的结构,但很好地了解未来的参考。我已经创建了我的结构,但很好地了解未来的参考。