Laravel无法为用户模型创建策略

时间:2019-07-05 17:19:32

标签: php laravel

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

我创建了这样的政策

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创建方法中,它将调用创建方法Policy,因此它表明存在问题

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

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

在AuthServiceProvider内部。

3 个答案:

答案 0 :(得分:1)

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

在UserPolicy.php中:

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

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

答案 1 :(得分:0)

您需要将其放入控制器的功能中 $this->authorize('create',$user)

答案 2 :(得分:0)

在控制器函数$ this-> authorizeForUser($ currentUser,'create',User :: class)的行下面放置