我想問一些關於Laravel應用程序中業務邏輯的代碼結構的其他意見,主要是關於行級權限。行級別權限和Laravel應用程序結構
對於那些不知道它的人來說,Laravel是一個PHP的MVC框架,就像Rails一樣。
爲了便於理解,我們假設一個多用戶應用程序,每個用戶都有他自己的專輯和圖片,到目前爲止都非常好。
- 現在,每個用戶都可以邀請他人協作(通過上傳照片)到他的相冊中。
- 上傳圖片的相冊的所有者和協作者都可以刪除或更新關於該圖片的信息。
- 只有擁有者可以編輯相冊並邀請新的合作者。
- 如果合作者願意,合作者可以自行刪除相冊。
Pinterest應該是類似的很好的例子,但我們的應用程序可能是3到4倍更復雜。 問題是:我應該在哪裏處理這種邏輯?
Laravel提出了一種存儲庫,實體和服務的方法,我可能並沒有完全理解,可能是因爲缺乏很好的例子。所以滿足這些最後期限的首要選擇就是把它全部放在控制器上(ew!)。現在,挖成重構,有許多可能的方式來un'spaghettize我們的代碼:
- 我見過的人行級執行ACL(看起來有點愚蠢和矯枉過正)
- 這將有可能轉向車型引入行爲感知對象,而不是唯一的數據容器,像
$album->add_photo($photo)
和檢查權限在該函數 - 這也將是可以覆蓋模型的保存方法,並在那裏做那些檢查
- ,或按照其的Laravel擬建道路單獨關注層
我想,像$album->can_be_edited_by($user)
有方法可以簡化航線上的404個錯誤回報顯示不準,隱藏視圖的鏈接,還可以節省你會推薦哪一個模型
前驗證,並且沒有人知道任何簡單,但可以理解的,不使用.NET的存儲庫,實體和服務的例子? 謝謝!
編輯:我想完整的ACL系統會導致過多的開銷,因爲可能有成千上萬的資源與每個用戶相關聯,但每種關聯只有一個角色。例如,圖片將有一個uploader_id
和相冊將有一個owner_id
。
你可能會發現這有點相關:http://stackoverflow.com/q/3430181/727208 – 2013-02-22 08:52:23
你的確是一個相當不錯的答案。儘管目前我們希望避免的是每行ACL,特別是因爲沒有組,並且在最壞的情況下,每個資源有兩種不同的權限類型,其中一個已經被外部'owner_id'鍵限制。我們假設有一個完整的ACL系統會導致過多的開銷。你對層的解釋使我對事物更清楚。 – vFragosop 2013-02-22 21:04:19