我目前工作的一個爾康應用。應用程序本身相對簡單,但我將它用作了解一些更高級概念和技術的工具。
我已經放棄了我的自制ACL(訪問控制列表)解決方案,並且在Phalcon中提供了ACL。
這個問題更具概念性,因爲我會對實施任何解決方案充滿信心。
問題
問題是這樣的: 「你在哪裏保存你的ACL信息?」
可能的解決方案
我現在有一個靜態數組,我充滿了各種行動和他們的訪問級別。
我覺得這是有限制的,並且可能通過數據庫存儲更好地服務。
我可以使用位掩碼來指示允許訪問各種資源的用戶角色,也可以是最低級別。
我有的另一個問題是它是分層的(在某種程度上),但可能存在多個角色 - 權限稍有不同。
eg.
Admin has all roles of captain, secretary and user.
Captain has all the roles of a user and the ability to pick players.
Secretary has all the roles of a user and contact the opponent's secretary.
Captain and secretary both have the ability to email players.
把它想象成有些權限的維恩圖的,如果你願意。
緩存
下一個問題,將數據庫的每一次訪問,會增加性能開銷,所以我想將其高速緩存纔有意義。
問題就出現了,如何使緩存失效(計算機科學中只有兩件難事......)......也許可能會有一個數據庫字段有ACL的md5散列,這是在頁面加載時檢查,看它是否需要重新加載ACL信息。
如果可以的話,我會碰到你。我本質上是同一條船。將ACL存儲在一個文件中(按照文檔)看起來有點簡單。如果你找到了更好的方法來做到這一點,你可以編輯這個問題嗎? – TheMonarch
我目前還沒有找到合適的解決方案。這篇文章沒有收到更多的評論是一種遺憾,因爲我認爲這是一個非常有趣的問題。 我想答案是將它存儲在數據庫中,然後緩存它?對這個問題的優點做一些澄清是很好的,如果不是的話,將會有什麼替代方案。 –
是的君主你的問題是非常好的,經常被phalcon用戶問到。 即使我正在尋找同樣的解決方案,我還沒有找到任何地方。 我試圖編寫一些自定義代碼來使ACL動態使用數據庫,但仍然與它掙扎。 請指導,如果你已經達到相同。 @TheMonarch –