系統設計——權限系統
前言:寫了兩篇關于DataGridView的文章:Winform系列——好用的DataGridview過濾控件(表格的進階搜尋功能) 和 Winform系列——好看的DataGridView折疊控件。這章來記錄下權限系統。關于權限系統,網上版本非常多,大都實用性不太高,大多數的系統就是因為分得太細了反而使系統錯綜複雜,甚至有看到有按照角色、部門、地區、使用者四個友善分别去做權限配置設定的,我的個神,這樣一來,要取一個使用者的權限那個麻煩,當然并非說那些大神們封的東西不好,而是适用性的問題,對于某些大型公司的系統,對權限要求确實有那麼高也說不定,但其實根據本人工作幾年的經驗來看,大部分的.Net系統其實對權限的要求并沒有想象中的那麼高。在這裡記錄下自己從頭到尾設計和開發的一個權限系統,個人覺得對于基本的權限配置設定夠用了。
1、系統介紹:說是系統,其實權限隻是系統的一個子產品,此系統主要就是根據角色來配置設定權限的,通過角色分别控制使用者的菜單權限和菜單對應頁面的按鈕權限。
2、資料表設計:
(1)上圖
(2)表的DDL語句:
View Code
(3) 表說明:權限子產品總共就6張表,即部門表、使用者表、角色表、使用者角色表、菜單表、菜單角色表(包含按鈕權限)。使用者表和角色表之間的關系是通用的多對多的關系,沒什麼好說的。看看TB_MenuRole表,這個表用來存儲角色的菜單權限和按鈕權限,其中role_type取值為menu和button,如果是menu,則此行記錄用于存儲菜單權限,button_id為空;如果是button,則此行記錄用于存儲菜單下的某一個按鈕的權限,menu_id為按鈕所在的菜單id,button_id為對應的按鈕id。還有一個問題就是按鈕的id從哪裡來?是否還應該有一個儲存按鈕ID的表呢?答案是不需要,後面會介紹。
3、效果圖:先做的是一個CS的系統,後續還會做BS的。
3.1 權限子產品主要分為4大頁面:使用者管理、角色管理、部門管理和菜單管理
3.2 使用者管理頁面:
“設定角色”操作:
3.3 角色管理頁面:
“編輯權限”操作:
在“編輯權限”彈出框中點選“設定按鈕操作”
角色管理頁面的“管理成員”操作:
可以新增目前角色的使用者,點選“新增”
3.4 部門管理頁面:
3.5 菜單管理頁面:
4、背景業務邏輯都是簡單的增删改查,沒什麼好說的。前面說的關于按鈕ID是否需要一張按鈕表的問題,我們系統在處理方式是
在點選設定按操作的時候傳遞一個菜單url,然後在代碼裡面通過反射得到所有的按鈕,然後勾選按鈕後儲存到資料庫。注意一個頁面的按鈕的ID不會重複,是以通過這樣可以取到唯一的按鈕,而在資料表TB_MenuRole中儲存的如果是按鈕權限,是有儲存Menu_Id的,是以不必擔心不同頁面的問題。這樣設計的好處是當程式員在頁面上面新增删除按鈕後不用修改配置,通過反射即可加載頁面的即時按鈕個數。純屬個人設計,如果有問題,歡迎大俠們指正。
标簽: 系統設計, 權限, 權限子產品