【发布时间】: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 中。
【问题讨论】:
-
是的,在文档laravel.com/docs/5.8/authorization 上查找
Methods Without Models。它多次提到需要采取额外的步骤,通常在使用create时