2014-05-16 51 views
0

目前我正在實施我自己的ACL系統。 爲了限制數據庫動作,我重寫了ActiveRecord類別beforeSave函數YII ACL查找BeforeSave訪問控制

我正在實現我的功能作爲默認模型類。

class Event extends ACL 
{ 

... 

} 

到目前爲止好。在我的數據庫中,我有一個特權表,用於存儲與特定表格上的操作相關的用戶,組,創建者或自我角色。我使用標準RBACyii頁面限制基於用戶級別所以我不必檢查每個頁面加載的所有權限。 ACL行爲僅用於與數據庫相關的目的。就像用戶希望看到帖子/ someid /視圖一樣,並且他沒有針對該特定帖子訪問權限的權限。

例如角色:一羣:4動作:插入表:事件

現在組ID 4有權限插入事件表。這部分工作正常,現在我想能夠限制某些用戶在我的數據庫中搜索表。如果'角色'是'用戶',則相同。在文檔中我找不到像beforeFind之類的東西。

是否有人知道在哪裏可以在入侵到系統中,並控制我們稱之爲beforeFind功能?

回答

0

您可能必須從您自己的類而不是framework\db -one中派生出基於ActiveRecord的類。如果你這樣做,那麼你可以在任何地方添加支票。

從理論上講,只要重寫find()-函數就可以避開它,並且禁止它返回一個ActiveQuery實例。不幸的是,框架函數本身並不檢查它們是否有實例,並且無論如何都會調用它的方法。所以期待那裏的問題。

實際上,您最終必須重寫其餘的(lineOneOne等)。這仍然讓人們有可能使用默認的ActiveRecord或數據庫連接本身。

說實話,我看不到一個用於試圖增加安全性這個低。我相當肯定,無論你需要做些什麼來獲得這個「安全」,它都會讓人不得不維護它。