2016-08-10 32 views
0

我在理解在Laravel中使用ACL或中間件的正確時間方面有點麻煩。我確實瞭解他們的網站和Laracasts上的例子,但它們是相當簡單的例子。Laravel中的權限 - ACL vs中間件

這不是任何複雜的手段,但我沒有看到這些例子。假設我有兩條允許用戶創建任務的路線。第一個是要求填寫信息的GET,第二個是存儲信息的POST。有些用戶不允許根據角色創建任務。在這兩種情況下,都沒有一個特定的對象存在,這就是ACL所要求的,據我所知。那麼我會用中間件來做那樣的事情嗎?而當一個對象存在時,使用ACL呢?

另一個我一直試圖適應的方式是使用Form Requests,但是之後我必須爲每個路徑創建一個Form Request對象(雖然我個人不介意)。

當沒有特定的行動來採取行動時,限制行動的好方法是什麼?

在此先感謝。

回答

1

注意事項:我打算髮表評論,但它有點過分。隨時等待更好的答案,也許考慮這只是一個評論。

我認爲你錯過了這裏的要點。您可以有一個middleware諮詢ACL,或者您可以使用FormRequest諮詢ACL或單獨使用它們中的每一個。例如,在CreateTaskRequestauthorize方法中,您可以檢查ACL以查看用戶是否具有創建任務的適當角色。

當Jeff試圖檢查用戶owns帖子時,您可能會覺得太過興奮。這種ACL是面向記錄的,但是你可以擁有一個只將用戶作爲參數的角色(而不是其他實體),並查看該用戶是否具有特定角色。通過返回true,該操作被授權,否則將被拒絕。

中間件有更多的與路線,而不是請求。您也可以有一箇中間件來獲取已認證的用戶,並檢查它是否具有創建任務的角色。這些是實現相同目標的不同方式(這是Laravel的好處之一,有很多方法可以實現相同的目標)。

您要採取的具體行動是「創建新任務」操作。你想要誰能做到這一點?擁有角色管理員的用戶?擁有create-task權限的用戶?

在一天結束的時候,我會考慮的是:

  • 是否有很多,將有相同的規則路線?也許中間件將是一個不錯的選擇。
  • 每種操作都有具體規則嗎?沒有創建任務的用戶可以編輯嗎?形式要求可能更容易實現這種規格
  • 哪個$this環境會讓我的生活更輕鬆? $this from Form Request or $this from middleware?

我從傑夫的課程中學到的一件事是他教了很多很酷的東西,有時我最終失去了一兩點。嘗試再次重新觀察基本步驟,也許會停下來,當你覺得你發現了一些可行的事情。然後實現它,看看你的情況與他的不同,以及你認爲他會怎樣寫這個功能。