到目前为止,我所看到的开发人员在模型策略中放入的唯一内容就是这样的简单语句:
public function update(User $user, Post $post): bool
{
return $user->id === $post->user_id;
}
在我的应用程序中,我有一个管理员用户应该能够编辑所有帖子,目前这是在我的应用程序的控制器端处理的,但将其移动到模型策略是一个好主意(有条件
if($user->is_admin) return true
)或者这个逻辑应该存在于其他地方?
询问是因为 Laravel 似乎有一大堆约定,我想确保我使用的是正确的约定。
是的,你应该,但也许将管理逻辑放在
AuthServiceProvider
模型策略是放置授权逻辑的正确位置之一。而且它们可能不仅仅是一行。
但大多数情况下,最好为管理员或超级管理员编写一次逻辑:
public function boot(): void
{
Gate::before(function ($user, $ability) {
return $user->hasRole('Super Admin') ? true : null;
});
}