拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 Laravel不断将GenericUser传递给策略而不是我的用户模型

Laravel不断将GenericUser传递给策略而不是我的用户模型

白鹭 - 2022-01-26 2000 0 0

我正在尝试使用标准的 Laravelauth相关功能。我有标准的登录、注册、注销等......作业正常。但我的问题是,每当我使用这样的函式时,都会Auth::user()回传GenericUser模型而不是我自己的App/Models/User.php模型。问题是我的用户模型对其他资料有一些外键参考,所以我想专门使用我的User模型。

例如,当Policy尝试做一个时,我遇到了一个错误:

代码看起来像这样:

<?php

namespace App\Policies;

use App\Models\Contract;
use App\Models\User;
use Illuminate\Auth\Access\HandlesAuthorization;

class ContractPolicy
{
    use HandlesAuthorization;

    public function before(User $user, $ability)
    {
        if ($user->isSuperAdmin()) {
            return true;
        }
    }

    public function viewAny(User $user)
    {
        return $user->isMember();
    }
}

GenericUser模型确实从users表中回传资料,但问题是它与我的User模型给出的完全不同,因此不包括我添加的外键参考或函式。我的印象是我可以通过切换config/auth.php提供者来切换使用的模型我做了什么,似乎没有任何改变:

'providers' => [
    'users' => [
        'model' => App\Models\User::class,
    ],

     'users' => [
         'driver' => 'database',
         'table' => 'users',
     ],
],

我在这里做错了什么?

uj5u.com热心网友回复:

您正在定义users提供程序以使用“数据库”驱动程序:

 'users' => [
     'driver' => 'database',
     'table' => 'users',
 ],

调整它以使用“雄辩”的驱动程序:

 'users' => [
     'driver' => 'eloquent',
     'model' => App\Models\User::class,
 ],

'database' 驱动程序使用 Query Builder 与数据库表进行互动并回传一个物件GenericUser来表示当前经过身份验证的用户。

'eloquent' 驱动程序使用 Eloquent 模型与数据库互动并回传一个模型实体。如果你喜欢 Eloquent 的人际关系和所有其他特性,那么你应该坚持使用“eloquent”驱动程序。此外,您已将 Policy 方法定义为期望将特定模型传递给其方法。

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *