開源許可權引擎-anycmd影片介紹《anycmd築基》

liangshan發表於2014-12-15
用於幫助群友和感興趣的同學快速知曉anycmd是什麼?許可權引擎是什麼?應群友要求昨天用QQ群錄製了一個影片,現已未做任何剪輯放在了土豆上分享大家。 感謝jdon感謝banq讓我學到很多才有了最近的思考。

第一次錄影片,有改進餘地。歡迎吐槽

影片地址:http://www.tudou.com/programs/view/4jXoarZKwCk/

提綱:

主體、客體、運動
1 許可權引擎是什麼?
2 它是開源的,開源協議是什麼?mit
開源多久了?開發了多長時間了?
3 它構建到什麼程度了
什麼是200層?
前100層是功能級許可權,後100層是資料級許可權。
前100層基本上是可用的了
4 它符合國家和國際標準嗎?
5 國家和國際標準有哪些?
rbac、xacml、javascript
6 哪裡可以找到資料
7 它是分散式的
許可權資料交換
8 許可權資料標準
9中AC元素
9 構造定律、樹形結構
如何構建一個系統?相信它是樹形的。
樹形在程式碼裡對應的是什麼?
資源樹、運動樹。
欄位、方法。


主體:指對客體有認識和實踐能力的物件。比如人、系統、服務提供者、服務消費者等。
客體:可被主體感知或想象到的任何事物。如檔案、印表機、終端、資料庫記錄等。
物件/資源:資源是需要進行訪問控制的系統資源,例如檔案、印表機、終端、資料庫記錄等。
資源型別:基於人類發明的分類法對資源按照性質、特點、用途等作為區分的標準而做的第一次分類。
許可權:對受保護的物件執行某個操作的許可。
操作:一個過程,這個過程通常有輸入與輸出,這個過程可能影響系統的狀態也可能不影響系統的狀態,是否影響系統的狀態有賴於你的領域邊界。首先基於資源型別定義一類資源的操作列表,通常這就夠了,但也有可能會需要針對特定物件例項定義操作列表。
這些術語從哪來的?國家標準文件上。
標準文件很好,不要害怕讀不懂。


有9種AC元素:Account、Organization、Role、Group、Function、Menu、AppSystem、ResourceType、Privilege。
Privilege的定義是這9種AC元素的任意兩兩組合,兩元中的一元是“主體”,一元是“客體”,主體負責感知客體。區分主客體就是為這兩兩組合定義了方向。一共是(9 * 8)/(2*1) = 36 + 9 = 45種結果。
在功能級許可權的這45種組合中只有一種組合最關鍵:(Account,Function),主體是Account,客體是Function。其餘44種組合的目的最終都是為了得出這個主體為Account客體為Function的組合。
每一個組合例項稱作一個Privilege,Privilege也是9種AC元素的一員,有一種組合比較特殊,它是(Privilege,Privilege),這種組合目的是組成Privilege的繼承鏈條,類似物件導向中的繼承。另外上面的36+9中的9種是(Account,Account)、(Organization,Organization)、(Role,Role)、(Group,Group)、(Function,Function)、(Menu,Menu)、(AppSystem,AppSystem)、(ResourceType,ResourceType)、(Privilege,Privilege)。
功能級的許可權是常駐記憶體的。
進入資料許可權的時候又多了一個元素,第10種元素是Entity或者叫資源記錄,資料級許可權是10種AC元素的組合。資料級許可權和資源記錄儲存在相同的物理位置,隨同對資源記錄的訪問一起載入進記憶體,用完後隨時丟棄不會常駐記憶體。
按照rbac標準上的說法是能夠完成任何功能級的許可權控制的,那麼多ac元素最終都是為了得到(account,function)組合,系統執行到一個受控的區域時什麼都不管只認(account,function)組合,只問當前使用者是否可以執行當前function。
要鑑權只需要知道當前的account和當前正在試圖訪問的function分別是什麼,其中account可以從UserSession中直接讀取,而如何識別function相對曲折,對於asp.net mvc來說可以基於這樣的約定:ControllerName=ResourceTypeCode,ActionName=FunctionCode,知道了ResourceType.Code和Function.Code就可以直接到FunctionSet中索引到function了。


為了開始構建後100層的資料級許可權,anycmd需要儘快為前100層的功能級許可權打個好節。
anycmd構建時找到的最重要的指向標是:始終以(主體,客體)的兩兩組合為中心,始終將主客體組合看作幹流,始終將那單個的9種AC元素看作是支流。


關於鑑權流程的捕獲和冒泡子流程:
anycmd的鑑權流程會像dom那樣(dom是樹),有捕獲流程還有冒泡流程。
當前節點要發生某件事情(運動)的時候如果它確定不了許可權則往上進行鑑權冒泡,許可權管理員可以在靠近根節點的少數節點中書寫少數的邏輯也可以在遠離根節點的節點中書寫精確的邏輯。它往上冒泡詢問它的父節點是否允許當前運動的發生?一直往上冒泡直到明確的得知是允許還是不允許。
它會支援javascript,安全管理員可以透過在整棵樹的任意節點書寫javascript來處理捕獲和冒泡。
技術不新鮮但是這種概念被應用到許可權管理領域還是比較新鮮的
所以說她計劃蓋200層樓,現在才蓋100層樓,而當今在這個領域平均才50層樓。

相關文章