【问题标题】:Laravel can't create policy for user modelLaravel 无法为用户模型创建策略
【发布时间】:2019-11-16 07:48:26
【问题描述】:

可以为用户模型创建策略。

我创建了这样的政策

php artisan make:policy UserPolicy --model=User

获得了带有 CRUD 操作的 UserPolicy.php。

然后我在 AuthServiceProvider.php 里面添加了

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

但是什么也没发生。据我了解,默认情况下为用户模型生成的策略在每个操作上都返回 false,我什至明确地将其添加到 UserPolicy 类中:

public function create(User $user)
{
    return false;
}

仍然可以创建用户。

稍后我需要检查用户是否尝试编辑自己的帖子。除编辑自己的个人资料(模型)外,非管理员用户应禁止一切操作。

我一定遗漏了一些明显的东西。

更新:

如果我放了

$this->authorize('create', $user);

在UsersController的create方法中,它会调用create方法Policy,所以它接缝有问题

...
use App\Policies\UserPolicy;
use App\User;
...

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

在 AuthServiceProvider 中。

【问题讨论】:

标签: php laravel


【解决方案1】:

你需要把它放在你的控制器中的函数中 $this->authorize('create',$user)

【讨论】:

    【解决方案2】:

    在你的控制器函数 $this->authorizeForUser($currentUser,'create', User::class) 中加入以下行

    【讨论】:

      【解决方案3】:

      您可以为用户策略编写此代码

      在 UserPolicy.php 中:

      public function update(User $user, User $model)
      {
          return $user->id === $model->id;
      }
      

      例如,通过此代码,您可以只更新您自己的个人资料。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-11
        • 2023-01-27
        • 1970-01-01
        • 1970-01-01
        • 2020-03-11
        • 2019-08-31
        • 2020-10-26
        • 2018-02-28
        相关资源
        最近更新 更多