接下來要作的是權限系統的數據庫結構設計,在上一章咱們瞭解了權限系統是經過什麼來管理好權限的,咱們選用其中比較經常使用的權限系統來實現當前項目管理要求。html
下面是咱們選擇的權限系統關係模型:前端
從以上關係能夠看到,用戶登陸成功之後,經過讀取管理員帳號信息獲取當前管理員所在部門與職位,讀取職位中的權限信息。進入系統之後,經過職位權限信息篩選出顯示的菜單項;訪問各功能頁面並進行增刪改查操做時,經過權限信息判斷當前管理員是否有操做權限,從而實現對系統管理員操做權限的控制。下面分別解說一下各數據表的用途。python
菜單表是用來註冊(綁定)菜單、管理頁面和接口用的,沒有將接口和菜單項添加到菜單表的話,程序是不清楚有那些菜單項和接口的,菜單項與接口之間存在什麼相的關係。sql
因此須要在開發時,手動將它們添加到菜單表中,才能對各功能進行對應的管理。數據庫
在開始設計菜單表以前,你們要思考的是,咱們須要存儲什麼信息,它們之間有什麼關聯,每一個字段有什麼用途,爲何要增長這個字段或減小這個字段?服務器
對於菜單表字段,多數字段你們都很容易定下來,好比說菜單名稱、菜單url(綁定的html頁面名稱或路徑)、菜單小圖標(增長菜單的美觀度)、上一菜單id(用於創建樹級菜單目錄)、排序、是否顯示(對於有些頁面或按鍵功能,不在菜單列表中顯示)、是否禁用(有些功能暫時不使用時,能夠將它禁用掉)。除了之些以外,咱們還須要增長菜單路由地址字段,用於存儲當前菜單所綁定頁面所須要使用到的路由地址項,好比說編輯菜單頁面,咱們在開發時須要先讀取這條記錄出來,而後再進行編輯,最後再提交,這裏就會涉及到兩個路由,一個是菜單記錄讀取的的路由,和菜單記錄修改的路由,在作權限判斷時,就能夠權限當前操做頁面與綁定的路由地址,跟權限信息進行比較,判斷是否有操做權限,具體會在後面對應章節詳細說明。因爲咱們前端使用的是jqGrid組件的樹列表功能,組件要求服務器端在返回列表時,還須要返回樹列表深度、當前節點是不是最終節點、當前節點是否展開三個字段,因此須要將它們加入菜單表中。cookie
根據這些要求,咱們的菜單表的數據結構以下數據結構
最終完成的菜單管理頁面效果以下:架構
部門表它至關於權限分組,能夠根據企業的部門結構,建立對應的結構記錄,這樣也方便企業對系統權限關係更加容易理解。固然也能夠根據須要設置虛擬部門出來管理。框架
對於部門表,首先它也是樹狀關係,因此它跟菜單表結構基本相似。
爲了之後擴展須要,須要添加部門編碼字段,編碼從01開始一直累加到99,固然若是部門超過99個的話,要麼增長到3位數,要麼當前框架已不能支持業務的發展須要思考新的架構了。
編碼每增長一級,在01後面自動增長」0x「,編碼的長度跟部門分級深度相關。
下面是部門表結構,看起來好像是在菜單表的基礎上刪減了不少字段得來的同樣。
職位表是綁定在部門下的權限角色,它直接與菜單項進行關聯,不一樣職位能夠設置不一樣的權限(設置可查看與操做的菜單項)
因此職位表須要存儲與部門表的關聯項:部門表id、部門編碼、和部門名稱(直接存儲這個冗餘字段,是爲在須要顯示職位所屬部門時,不須要從部門表中關聯查詢,由於部門名稱幾乎設置後就不會再進行更改了)
另外,它還須要擁有職位名稱、菜單權限兩個字段
頁面效果圖:
而管理員帳號管理,主要管理的是後臺管理員登陸帳號與密碼,管理員的基本信息,還有操做權限。
而權限的管理只須要綁定對應的部門與職位,在用戶登陸時就能夠經過這個綁定獲取對應的操做權限。
通常來講,管理員帳號須要記錄:登錄帳號、登陸密碼、登陸密鑰(若是須要經過APP端登陸、須要對訪問連接加密或是啓用cookies驗證登陸的,須要這個字段來存儲用戶本身對應的密鑰)、最後登陸時間、最後登陸id、登陸次數、註冊時間等信息
而管理員的基本信息,則是根據不一樣企業的管理需求不一樣而不一樣,有的將人事管理也添加到系統中,則須要記錄每一個員工的全部基本信息,固然經常使用的信息有:用戶中文名稱、性別、出生日期、手機號碼、郵箱、備註,你們根據須要自行添加或刪減。
而用戶的權限相關字段,主要是綁定部門與職位,和工做狀態和帳號狀態它些字段了。
具體數據結構:
頁面效果圖:
作來管理系統,固然還須要記錄管理員的全部操做記錄,好比登陸、退出、瀏覽了什麼頁面,操做過什麼,因此還要增長一個管理員操做日誌表,方便查看分析問題,分清責任
權限管理數據表建立sql下載 (PS:爲了方便操做,sql會將以前建立的manager表刪除,而後從新添加admin管理員帳號進去)
版權聲明:本文原創發表於 博客園,做者爲 AllEmpty 本文歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然視爲侵權。
python開發QQ羣:669058475(本羣已滿)、733466321(能夠加2羣) 做者博客:http://www.cnblogs.com/EmptyFS/