检查登录时是否为管理员,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)
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
。否则,您必须在每个模型关系中指定名称。您可以查看包中基于角色的授权和权限。这是一个很棒的包。此软件包文档丰富,易于使用。您可以查看该软件包,了解基于角色的授权和权限。这是一个很棒的包。这个软件包有很好的文档记录,并且易于使用。我已经创建了我的结构,但很好地了解未来的参考。我已经创建了我的结构,但很好地了解未来的参考。