微軟的forms授權是基於角色和使用者的,這樣可以很容易的限定那些使用者,角色可以訪問某個頁面目錄的許可權。但是正如需求工程討論的,有時候客戶很不容易滿足,現在我的客戶要求系統允許他們自己可以定義角色可以做那些操作,也就是說角色可以做什麼是可定義的使用者隨時可以修改的,這樣如果使用微軟的forms認證就實現不了了,我們不可能在使用者每次自定義了角色的操作許可權之後,都去修改一次web.config中的定義,怎麼辦?
客戶有提出需求的權利,我們有滿足客戶需求的智慧型,前提是客戶願意為自己的需求付出銀子,呵呵。角色可以做的操作是可定義的,所以我們需要在資料庫中儲存角色,和角色可以做的操作,以及使用者屬於那個資源上的那個角色。前一句話中引出了乙個新的概念「資源」,它可以是cms內容管理系統中的頻道,也可以是論壇中的版面,就是使用者是「a頻道」的「管理員」,但是不是「b頻道」的管理員中的「a頻道」,「b頻道」。我們可以據以上描述設計概念模型如下:
(由於我現在正在做乙個論壇的專案,所以上面的表都有forum的字首,_tab是我們規範中的字尾)
以上模型中定義了角色,操作,角色操作定義關係,以及版面使用者角色對應關係,通過上面的模型我們就可以實現使用者要求的自定義角色可以做那些操作的需求了。
有了資料庫的概念模型,還是不夠的,我們還需要設計一下,讓我們這套授權方案的使用和微軟的forms認證一樣方便。forms認證可以通過web.config的定義角色頁面的訪問許可權,我們這套授權方案,肯定是不能這樣做的,因為我們的角色可以做什麼是可定義的。但是我們的許可權方案中也有不變的元素,那就是action---操作,而每乙個頁面中有那些操作,這一點也是一定的,所以我們可以給頁面指定其操作,在使用者訪問時再根據使用者屬於的角色來得到角色可以執行的操作來判斷當前使用者是否可以進入頁面,如果可以進入再在實際操作中判斷使用者是否有在某個資源上執行的許可權。
基於操作+角色的授權方案實現篇
基於角色的許可權管理系統設計思路
許可權管理功能是專案中重要的部分,通過許可權系統可以控制系統中各使用者所擁有的許可權,比如能否開啟乙個頁面,能否進行某項操作,合理的許可權控制可以規避誤操作的風險,提高系統的可用性。許可權管理的思路一般為基於角色和基於資源兩種,基於角色即對為使用者賦予某些角色的許可權,基於資源則為對使用者賦予某些資...
shiro實現基於角色的許可權授權
shiro除了登陸驗證之外,還有一點就是對系統進行相應的許可權操作,而基於角色的授權是目前最通用的做法,也是符合業務邏輯的。具體思路如下 1.資料庫設計好許可權表,角色表 許可權標識是自定義的,shiro會根據 裡面相應的許可權對系統做出管理 2.將許可權表與角色表做外來鍵關聯 多對一 使用者表與角...
使用者間的通訊方案設計
實現乙個利用 websocket 進行實時通訊的基於 web 的即時通訊應用,假設未來使用者量會很大,要用到多個伺服器,如何實現兩個使用者間的通訊呢?負載均衡演算法和訊息路由演算法均採用 一致性雜湊演算法 具體過程是 客戶端連線時根據ip或者客戶端標識通過一致性雜湊演算法定位到某台伺服器,訊息路由時...