企業級系統的認證與授權設計
首先我們要搞清楚一個問題,什么是認證,什么是授權。
認證——你是誰(Who)?
認證:認證(authentication):即對不同的用戶進行識別,檢查用戶是否有權限對那些受限制的界面進行訪問,這種稱為認證。比如登錄。
授權——誰(Who),在那個系統(Where),可以做什么(What)?
授權(authorization):決定用戶可以對哪些功能按鈕進行操作,對那些數據(數據行,數據列)進行有效的訪問即稱作為授權。
其中功能操作的授權稱作為功能權限。比如下圖:員工A要有 公司知識庫平臺->培訓->培訓預算->申請培訓->培訓列表頁面的【查詢】和【申請】按鈕,同時員工A要有 公司綜合管理平臺 ->信息中心->通知公告->通知公告列表頁面的【發布】和【查詢】按鈕的操作權限。如圖所示,在現實場景中,跨平臺,跨系統的場景比比皆是。
其中數據權限以下圖為例:我們看到下圖用紅色框圈起來了一個數據列表。假設這個數據列表為某企業集團的銷售匯總表。
現在客戶提出了如下幾個需求:
1) 銷售總經理可以查看所有的匯總數據。
2) 大區經理只能查看自己所屬大區的數據。
3) 職位等級在二級以下(包括二級)的只能查看自己所屬區域交易累計金額小于1000的數據。
4) 只有銷售總經理,大區經理能查看聯系方式。
如此需求,在企業級ERP開發中屢見不鮮,為了解決客戶的需求,我們不得不反復的去修改和發布代碼,其實我們可以通過簡單的配置來滿足客戶的需求。這個簡單的配置我們就可以稱之為認證授權系統,說到這兒,就簡單的把這個系統的概念引申出來了。
那我們要設計這個系統,我們要考慮到一些什么因素呢?要做出一個適應客戶需求變化的系統,必須要具備一個良好的設計。
首先,認證與授權系統的架構應該是一個SOA的架構。這兒所用的SOA絕對不是趕技術的時髦。因為一個企業集團可能有幾個,甚而幾十個,上百個的子系統。我們不可能為每個子系統都維護個套用戶表,角色表,以及一套權限系統。所以要把這個認證與授權的功能給抽出來,做成一個松耦合的子系統。但同時這個子系統要與其它系統進行數據交互,所以我們要采用一定的技術手段來與業務系統通信,不管是用Web Service還是WCF,其實目的都只有一個,就是讓認證與授權系統與其它業務系統進行通信。這樣即實現了一處維護多處運用的場景,這樣就實現了系統級的重用,當然,采用了SOA的開發,就不得不提SOA的安全,我在這個系統里是使用的c#攔截器機制,具體的實現以后有機會單獨提出來與大家分享,有感興趣的朋友我們可以建一個群共同交流。
其次,系統的可擴展性要強,特別要有一個強有力的代碼支撐。比如認證授權這個系統,用B/S模式的更好,還是用C/S模式的更好?這個是各圓其說,我做了六年的B/S項目,但是我***還是選擇用C/S的結構來開發,其中的原因以后有時間一一道來。我們來欣賞下現的一個代碼片段:
我把客戶端的驗證放在了Model上,如果在B/S架構下,我不用重復的去寫一次JavaScript的驗證。常用MVC的朋友都知道在B/S結構下,怎樣用Model的屬性進行客戶端的驗證了。在C/S結構下,可以通過WPF輕而易舉的實現客戶端的驗證,這樣寫的目的,就達到了代碼級別的重用。
還有一個比較重要的因素,就是用戶體驗。當我們的程序設計的如何的好,代碼重構的怎樣的精練,如果沒有一個好的人機交互,想必會抹殺很大一批用戶的好感。對我們程序員來說,要設計一個好的人機交互界面,確實有待提升。我以現在這個系統的UI來說吧,在短短半年的時間里,UI重構了三次,***次是用WPF下的Ribbon插件來設計的。第二次是用微軟官方示例提供的設計,其中還包括了動態翻頁的效果,非常炫。第三次,采用微軟的Metro風格設計。很明顯每次的設計都有質的提升。
***個版本的界面:Ribbon。
第二個版本的界面:WPF技術下實現的翻頁特效界面。
第三個版本的界面(Metro):采用Prism + MVVM開發的。
每個界面雖然都丑,但是也各具特色。只是個人的喜好而已。
原文鏈接:http://www.cnblogs.com/xcj26/archive/2013/03/28/2984840.html
【編輯推薦】