我是Laravel的新手,我在Users and Post上创建了一个微型博客,每个人都可以看到该帖子,每个用户都可以删除和更新自己的帖子,因此我正在使用授权政策。
在创建策略时,我意识到两者的代码(删除/更新)是相同的
public function update(User $user, Post $post)
{
return $user->id === $post->user_id;
}
public function delete(User $user, Post $post)
{
return $user->id === $post->user_id;
}
我应该保持这种方式还是应该只做一个方法,因为它是多余的? 我的意思是,如果我只使用一种方法,那么我可以将它从PostController的构造函数一行应用到我想要的所有Controller方法中
$this->middleware('can:policyMethodName, post')->except('show', 'index', 'create');
在Laravel中执行政策的最佳做法是什么?
答案 0 :(得分:0)
这是编程的一般问题,不是Laravel的特定问题。
从功能的角度来看,您将不得不问自己什么才更有意义。如果您期望此博客将始终允许用户更新/删除他们自己的帖子,则可以使用一个单独的方法canEditOrDelete
。但是,在将来,例如,如果您认为有机会限制用户在 n 分钟内编辑帖子,则需要重新编程逻辑。希望这 无关紧要,因为您要限制引用此方法的次数。
如果您想真正地 ,可以使用bit-based permissions。如果您以前没有使用过位操作,则需要一点时间来适应,但这是一个相对的步履蹒跚,并为您提供了更多的灵活性。
class Permissions {
const CAN_EDIT = 1;
const CAN_DELETE = 2;
const CAN_EDIT_OR_DELETE = CAN_EDIT | CAN_DELETE; // in base-10, this is "3"
}
permissions($user, $post) & Permissions.CAN_EDIT_OR_DELETE; // returns true if user can edit or delete post.