用户策略问题当我定义两个用户模型时

Posted

技术标签:

【中文标题】用户策略问题当我定义两个用户模型时【英文标题】:User Policy Problem When I define two User models 【发布时间】:2019-05-18 05:58:04 【问题描述】:

我在 Laravel 中使用策略。当我在策略中使用两个用户模型时,它不会访问我!但是,$user$player 都分别返回给我正确的数据。我该如何处理?我的错误是什么?

在控制器中:

$this->authorize('modifyTournamentRegistration', $player);

在政策中:

public function modifyTournamentRegistration(User $user, User $player)
    
        return $user->id === $player->id || $user->inRole('admin');
    

【问题讨论】:

【参考方案1】:

我发现这是因为 Policy 中的 Input 变量类型。我在 AuthServiceProvider 中添加了 User 类:

protected $policies = [
        'App\Model' => 'App\Policies\ModelPolicy',
        User::class => UserPolicy::class,
    ];

然后,我在 UserPolicy 中定义了函数:

public function modifyPlayerTournamentRegistration(User $user, User $player)
    
        return $player->id === $user->id || $user->inRole('admin');
    

并在Controller中使用:

$this->authorize('modifyTournamentRegistration', $player);

它也有效:)

【讨论】:

以上是关于用户策略问题当我定义两个用户模型时的主要内容,如果未能解决你的问题,请参考以下文章

无法更新自定义用户 (AbstractUser)

Rails - 如何让两个用户 ID 与模型相关联

Django 管理员无法使用自定义用户模型正确登录

带有自定义用户模型加载夹具错误的 Django 项目

当我设置两个有效对象之间的关系时,validateForInsert 失败

Laravel使用policy完成用户授权