簡體   English   中英

Laravel 政策最佳實踐

[英]Laravel Policies Best Practices

我是 Laravel 的新人,我正在用 Users 和 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 中應用策略的最佳做法是什么?

這是編程的一般問題,而不是 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.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM