Laravel政策最佳做法

时间:2020-08-29 20:31:24

标签: php laravel

我是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中执行政策的最佳做法是什么?

1 个答案:

答案 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.
相关问题