为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel 政策最佳实践

Laravel 政策最佳实践

PHP
万千封印 2023-11-05 15:50:15
我是 Laravel 的新人,我正在用用户和帖子制作一个迷你博客,每个人都可以看到帖子,每个用户都可以删除和更新自己的帖子,所以我使用策略进行授权。在创建我的策略时,我意识到两者(删除/更新)的代码是相同的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 的构造函数中一行应用到我想要的所有控制器方法$this->middleware('can:policyMethodName, post')->except('show', 'index', 'create');在 Laravel 中应用策略的最佳实践是什么?
查看完整描述

1 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

这是编程的一般问题,而不是 Laravel 的特定问题。

从功能的角度来看,您必须问自己什么更有意义。如果您预计此博客将始终允许用户更新/删除自己的帖子,那么使用单一方法可能是有意义的canEditOrDelete。然而,在未来,如果您认为有可能希望限制用户编辑帖子n分钟,例如,那么您需要重新编程您的逻辑。希望这不会重要,因为您限制了引用此方法的次数。

如果您想真正变得更奇特,您可以使用基于位的权限。如果您以前没有使用过位操作,则需要一些时间来适应,但这相对容易,并且为您提供了更多的灵活性。

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.



查看完整回答
反对 回复 2023-11-05
  • 1 回答
  • 0 关注
  • 118 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信