比方說,我有三個表格:users
,books
和users_books
。應該在哪裏用Acl進行過濾?
在我的一個觀點中,我想顯示當前用戶有權訪問的所有書籍的列表。如果在users_books
中存在與用戶和書籍匹配的行,則用戶可以訪問書籍。
有(至少)兩種方式,我可以做到這一點:
- 在我的
books
模型fetchAll()
方法,在users_books
表上執行某種形式的join
。 - 在Acl插件中,首先從每本書中創建一個資源。然後,爲每個用戶創建一個角色。接下來,根據
users_books
表允許或拒絕用戶訪問每個資源。最後,在books
模型的fetchAll()
方法中,使用當前用戶作爲角色,在我們找到的每本書上調用isAllowed()
。
我把最後一個選項看成是最好的選擇,因爲那時我可以在我的應用程序的其他地方使用Acl。這將消除執行重複訪問檢查的需要。
你會建議什麼?
謝謝你,我決定使用你的第二種方法。在每個請求中構建整個Acl都沒有意義,因爲大多數頁面都不會使用它。再次感謝! – 2011-05-24 23:14:00