asp.net mvc +easyui 實現權限管理(二)

一寫完後,很久沒有繼續寫了。最近公司又在從新開發權限系統了,可是因爲我人微言輕,沒法阻止他們設計一個太監版的權限系統。想一想確實是官大一級壓死人啊, 沒辦法我只好不參與了 讓他們去折騰。html

我就大概說一下公司目前在作的權限系統,各位看官給點評價。git

設計整體要求: (注:項目名稱爲 統一權限管理系統)github

1.作一個通用權限系統。web

2.權限設計按照角色設置。數據庫

3.提供統一權限接口api

      以上就是總體要求,解釋一下, 咱們的通用是指的之後每開發一套新系統,只須要在統一權限管理系統中進行相應的配置就行了,無需再去開發一套權限系統。說白了就是全部系統各自有本身的權限數據庫表,表名稱和字段都同樣,只是在不一樣的數據庫中,可是公用一套統一的設置頁面,進入統一權限系統後,先選擇具體的系統 好比財務系統,而後就進入財務系統的權限管理(原理很簡單 就是在選擇具體系統的時候切換到相應的數據庫)。緩存

     相信在以前的一篇文章中我已經詳細介紹過個人設計思路 即:全部權限跟用戶掛鉤, 最終的權限體如今用戶權限表中。而用戶角色在個人設計中只是起到了一個統一分配權限的做用, 即便沒有角色也不要緊,我能夠直接給某個用戶分配權限。這樣設計我認爲分配權限是很是靈活的,可是有個缺點就是用戶權限表的數據量有點大,咱們目前的erp系統中該表已經有了250萬條數據了,3800多個用戶平均有600多條數據。可是並不影響快速檢索,而目前他們作的角色設計是全部人的權限都來自於角色,因而當某個用戶有特殊權限的時候不得不給他新建一個角色(我也是無語了,就這種設計竟然也能被經過,嚴重不知足複雜權限需求的狀況,後期致使過多的角色,混亂是能夠想象的)。安全

      另外還有一個很是坑爹的設計 即每當在統一權限系統建立一個新的系統時,好比財務系統,那就在一臺數據庫服務器上添加一個相應的數據庫(只有權限相關的表)。兩個系統就兩個數據庫只是名稱不一樣。(注意一點:是同一臺數據庫服務器上)。這樣腦殘的設計最終的結果就是 財務系統的業務表和權限表分別放在不一樣的服務器上了,  那麼須要獲得用戶權限時就得去調用webapi接口獲取。能夠想象系統間將嚴重耦合 , 全部系統依賴於權限接口,並且全部權限表放在同一臺數據庫服務器上安全風險很高,一旦接口或者數據庫出問題那麼全部系統都掛掉,另一個問題是不得不在權限表和業務表之間同步數據權限(如:分銷商權限,分銷商是屬於業務相關的數據,也是數據權限的一種,那麼在業務中新添加一個分銷商就得經過接口同步到權限表中,耦合性也很高)。服務器

     好了吐槽結束,那麼我會怎麼改進這個設計呢? 經過以上的分析能夠看出存在的幾個問題:ui

     1.徹底按照角色分配權限不夠靈活。

     2.全部權限表放在同一臺服務器上耦合性過高,不安全,且沒法作表之間的關聯。

     3.設計太複雜,致使系統效率下降(主要是指 須要接口獲取權限不夠快(緩存是個辦法,可是不得不考慮緩存過時))。

   針對以上問題個人設計是:1.用戶的全部最終權限均可以跟用戶id直接掛鉤(即:用戶的權限不徹底依賴於角色,最終用戶全部的權限體現是在用戶權限表中)。

                                     2.每套系統的權限表跟業務表放在同一個數據庫中,只是將管理權限的頁面統一。

                                     3.統一權限管理系統的數據庫中只保留 用戶表,系統信息表,用戶系統表等基本的表(注:公司全部的用戶放在一塊兒,方便統一登陸系統,即財務系統和進銷存系統只用登陸一個,另外一個直接切換不須要重複登陸每一個系統)。

    梳理一下統一權限管理的流程以下:

     1.用戶經過同一個登陸網址進入系統。

     2. 判斷用戶是否爲管理員,若是是管理員則跳轉到系統管理頁面,若是是普通用戶就跳轉到選擇業務系統的入口。

     3.管理員能夠添加系統,輸入系統名稱,編碼,以及數據庫的帳號密碼 點擊建立系統(這裏須要數據庫的帳號密碼,後臺會作加密處理,安全性應該沒問題),也能夠點擊進入以前已經建立的系統。

     4.管理相應的用戶權限。

   總結統一權限分配提供以下功能:

                                   1.業務系統維護(即:能夠管理業務系統,好比添加一個財務系統,那麼根據添加時提供的數據庫帳號密碼 會自動建立一套權限相關的表)

                                   2.用戶管理(公司全部的用戶都統一在這裏管理,方便作統一登陸等)

                                   3.系統頁面管理(即:業務系統的頁面管理,好比:財務的帳套管理頁面,那麼我須要配置 頁面名稱,頁面地址,頁面圖標,是否啓用,是否顯示等)

                                   4.系統數據字典(即 表字段)

                                   5.功能按鈕 (添加,修改 等等)

                                   6.頁面權限分配(將頁面和字典、功能關聯在一塊兒。即:頁面有哪些字段,哪些功能按鈕)

                                   7.用戶權限分配 (勾選用戶的權限 包括:頁面權限,字段權限,功能按鈕權限,數據權限)

                                   8.角色管理

                                   9.部門管理

                                   10.角色權限管理(給角色分配權限 同樣是 頁面權限 字段權限 功能權限 數據權限 不一樣的是角色權限的變化須要反映到對應的用戶上)

                                   11.統一登陸功能(公司全部的軟件系統都統一在這裏登陸,登陸後再選擇業務系統,業務系統之間跳轉不須要從新登陸。)

                                   12.數據庫相關的操做(數據庫表添加,簡單查詢,添加數據,備份等)

                                   13.日誌(登陸日誌,操做日誌,錯誤日誌)

  設計大概就是這些了,我打算利用休息時間,在github上建立一個開源項目來實現這些功能。開發的技術大概是:Asp.net MVC+easyui+Ibatis.net 。具體的github地址過段時間再公佈出來。

相關文章
相關標籤/搜索