許可權引擎,可以怎麼和認證框架結合不?

luda發表於2015-06-18
許可權引擎,可以怎麼和認證框架結合不?

可以和認證框架結合,許可權引擎中應該有個SignIn介面,業務系統透過這個入口向許可權引擎(許可權引擎嵌入在業務系統程式內執行)傳入使用者名稱和密碼來登入許可權引擎,這是“驗證使用者的身份並進入許可權引擎”的意思。應該也提供“不驗證使用者身份直接進入許可權引擎的入口”,就是說許可權引擎不要業務系統提供使用者名稱和密碼了而是由業務系統直接將代表當前使用者的資料送入許可權引擎中去。

認證框架所幹的事情是解決“誰?什麼時間?什麼空間?什麼事情?什麼輸入?什麼輸出?”中的第一個問號,解決“誰”的問題。由於許可權引擎幹事情時第一步就要問當前活動的使用者是“誰”容易讓人誤以為“身份認證”也需要許可權引擎來做。

比如業務系統傳給許可權引擎一個Dictionary<string, object>型別的物件表示當前登入的使用者,這個字典中約定了LoginName、AccountId,LastLoginOn(DateTime),LoginOn等主體類別的基本資訊放在Dictioanry(或者叫HashTable)的什麼鍵什麼桶中。還可以做一個這樣的約定,常用的資訊應由業務系統透過這個字典承載後直接傳入許可權引擎中,當許可權引擎工作時需要訪問當前使用者的資訊的時候應首先到這個字典中去查詢,只有找不到對應鍵的資訊時才應透過許可權引擎配置的資料訪問通道再到使用者所在的資料庫去查詢資訊再放入桶中。

通常情況下許可權引擎事先並不知道鑑權時需要用到哪些資訊。比如許可權引擎工作時,根據資源的AcContent中的js中的或者xacml書寫的安全策略的內容,AcContent中的安全策略執行時可能需要訪問當前使用者的“性別”屬性,可是當前使用者進入許可權引擎時傳入的字典中不一定有Key為Gender的項,於是許可權引擎讀取代表當前使用者的那個Dictionary<string, object>物件中的key為“AccountId“的值並用此值去資料庫中查詢當前使用者的Gender值然後再放入這個字典中。

這個Dictionary<string, object>字典往往就是技術框架中對應當前使用者的那個Session物件,因為許可權引擎是跟對應的技術框架執行在一起的,直接用那個Session就行。但是也可能有必要由許可權引擎自己去維護出一套專用於訪問控制的Session從而和具體的技術設施隔離開許可權引擎就更通用了。許可權引擎中也有一套Session管理機制,即時釋出訂閱或者週期監控和發現不再使用的Session資料並回收掉。

大方向應該不錯,這樣走下去,可以最佳化的地方還有很多並一一顯露出來了。比如第一個使用者第一次進入許可權引擎的時候許可權引擎並不清楚後續對使用者的活動進行鑑權的時候可能會用到哪些資訊,比如並不知道會用到使用者的性別欄位的值,可是第二次時許可權引擎就可能知道了。因為許可權引擎可以動態的識別出來並快取一套後設資料,下次再有使用者進來的時候許可權引擎可能就會一次性的把對這個使用者的後續活動鑑權時可能用到的資料提前成批載入進記憶體了不用每次用到時再去載入了。

認證框架所幹的事情是解決“誰?什麼時間?什麼空間?什麼事情?什麼輸入?什麼輸出?”中的第一個問號,解決“誰”的問題。

什麼空間=>這裡的空間概念非常廣泛,主要分兩類,一類是使用者本神所處的物理空間資料,一類是使用者的分神所處的網路空間資料。使用者本神的空間屬性在“誰”的屬性中攜帶,使用者分神的網路空間屬性指的是我們的各種各樣的業務系統中的空間。指的是程式程式碼堆砌出來的那個樹形的集合(即空間),指的是使用者的分神在我們的系統樹中所處的位置,因為使用者的分神是在我們的系統樹(空間)中行走的。系統內的空間和系統外的空間都需要,因為使用者書寫的安全策略上的內容可能是“如果當前請求使用者在家則不允許幹當前這件事情,如果在公司則允許幹當前這件事情”,這樣的安全策略就需要我們識別出使用者本神所處的現實物理空間了。

“誰?什麼時間?什麼空間?什麼事情?什麼輸入?什麼輸出?”分別對應:

誰=>主體;

什麼時間=>指定的唯一的時鐘的當前時間取值,代表宇宙系統的當前狀態,所有系統都處在宇宙系統之內,所有區域性系統內的時間都與宇宙時間換算一致,用人們總結的相對論那樣的公式去換算(北京時間,或者各種各樣的可以換算為北京時間的時間)。

什麼事情=>指運動的種類,只有主體可以在系統內走來走去把系統內的空間單元搬來搬去,有各種各樣的搬動空間的辦法,這裡的“什麼事情”指的是辦法的種類,叫什麼種類的事情更合適,這個種類是由業務系統劃分的,是業務系統對自己本地的各種各樣的運動進行的分類。

什麼輸入=>“什麼事情”的入參;

什麼輸出=>"什麼事情"的返回值;

執行景象
訪問控制是自然進行的,比如小明在公司樓下買菸,沒錢買不了,錢不夠買不了,把這說成業務行,說成是許可權也行,沒有啥區別。這就是一種運動,是系統內的一種運動定律,錢進來了煙出去了,錢沒進來煙不能出去。煙是客體,煙不能動,只有主體可以搬動它,買菸涉及到兩個主體,一個是賣煙的銷售員一個是買菸的小明,小明把錢搬動到銷售員手裡,銷售員把煙搬動到小明手裡,只有這兩個主體在攜帶著客體運動,客體自己並沒有主動運動。客體是資源,資源是空間,主體也是資源也是空間,但是是有主觀能動性的空間,只有主體可以在系統內根據自己的當前狀態或者叫意願行走,除了主體外誰也不能行走。小明為什麼下樓買菸?因為他的狀態變了他的煙抽完了,因為他是菸民。

信仰
每一件事情都是有理由的都是有因果的,量子力學是錯誤的,世界不可能沒有因果。比如如果按照這個人的認知出發的話量子力學就是假的。

許可權引擎,可以怎麼和認證框架結合不?
// 作者在jdon裡,上圖是在追溯jdon中的帖子的時候,在回帖中發現了個導向douban的連線,順著偶遇的。作者在jdon中,id忘了,在下面的回覆中追貼上。

後果
運動如果沒能按照運動定律規定的那樣完成,是可以自動倒回去的,比如運動定律說了“進來14塊錢可以出去一包A型黃金葉”,結果由於售貨員的錯誤導致錯誤的拿了一盒20元的B型黃金葉給顧客。這在現實世界中會發生,這不會引起太大的問題,因為10秒鐘後售貨員發現了這件事情,找到那個沒走遠的顧客換了回來。如果沒倒回來也沒有什麼大不了的,售貨員是智慧的系統,下次賣貨時他自己會小心一點的。智慧的售貨員單元會自我改善自己,如果他實在無法自我改善,如果他經常發生別人給14塊錢而換給別人20塊錢的煙這種事情的話,經常發生而不自我改善的話系統會幫他改善的,他可能會破產,他可能被系統淘汰掉。人工智慧機器學習可能就是類似上面那樣這樣的演算法,強化好的單元大規模複製好的單元淘汰掉不好的單元,到底是不是這樣的我不清楚,目前只處在想象和聽說階段。

相關文章