1. 程式人生 > >【資料庫設計-2】許可權設計-系統登入使用者許可權設計

【資料庫設計-2】許可權設計-系統登入使用者許可權設計

需求分析—場景假設需要為公司設計一個人員管理系統,併為各級領導及全體員工分配系統登入賬號。有如下幾個要求:1. 許可權等級不同:公司領導登入後可檢視所有員工資訊,部門領導登入後只可檢視本部門員工的資訊,員工登入後只可檢視自己的資訊;2. 訪問許可權不同:如公司領導登入後,可檢視員工薪水分佈介面,而員工則不能看到;3. 操作許可權不同:如系統管理員可以在資訊釋出介面進行增刪改查釋出資訊,而普通員工只可以在資訊釋出介面進行檢視,不能修改、刪除和新增。

功能分析1. 登入一個系統,基本都需要使用者輸入使用者名稱、密碼;
2. 每個使用者的角色不同,則其訪問許可權一般也不同,如:       系統管理員:可以檢視所有介面;       普通使用者:只能檢視部分介面。3. 不同的使用者,即使可以檢視同樣的介面,但在該介面上可進行的操作許可權
也不同,如:       使用者1:可以在介面1上進行增刪改查;       使用者2:只可以在介面1上檢視,不具備增刪改功能;4. 不同使用者基本都對應不同角色,如:使用者1、使用者2分別對應管理員角色、操作員角色,角色之間也存在許可權等級的差異,如:      角色1:對應省級管理員;==>可以檢視該省下的所有學校資訊;      角色2:對應市級管理員;==>可以檢視該市下的所有學校資訊;      角色3:對應縣級管理員;==>可以檢視該縣下的所有學校資訊;不管是省、市、縣哪個系統管理員,他們可訪問的介面都是相同的(即訪問許可權相同),且在每個介面上可進行的操作許可權也相同
的,不同的是每個管理員角色可以訪問的學校個數和學校範圍不同,這裡稱這種不同為:許可權等級不同;
總結:從上面的分析中,主要涉及到以下幾個概念:1.角色:       如系統管理員角色,系統操作員角色,普通使用者角色;       不同的角色,其訪問許可權是不同的,即可訪問的模組(介面)集合是不同的;       角色的許可權等級也不同,許可權等級如:公司領導、部分領導、普通員工;2. 模組:(介面)    模組就是指具體的介面,每個模組上又有不同的操作,如增刪改查;3. 訪問許可權:確定角色可以訪問的模組(介面)集合;
4. 操作許可權:確定可以在各模組(介面)上進行的操作集合,如增刪改查;5. 許可權等級:即確定角色可以訪問的範圍,如:
         角色1:許可權等級為公司領導,則可以檢視公司所有員工資訊;         角色2:許可權等級為部門領導,則只可以檢視該部門所有員工資訊。資料庫設計總體模型:1.模組定義表:
模組是分層級的,如:資訊管理–>聯絡方式管理;
每個模組都有上級模組。2. 角色定義表:含有角色許可權等級,用於為角色分配許可權等級;角色許可權等級:是一個選單選項,包括公司領導、部門領導、普通員工;3.授權定義表:用於給角色分配訪問許可權以及為每個模組分配操作許可權;1個角色可以含有多個模組,同樣1個模組可以分配給多個角色,所以角色和模組是多對多的關係;這種多對多的關係可以使用關係表來實現,即通過聯合主鍵和實現關係表:
表中含有欄位“操作許可權”,用於給每個介面分配操作許可權,見下圖:若該模組有增刪改查功能,則操作許可權15,即二進位制的“1111”,若該模組只有檢視功能,則操作許可權為2,即二進位制的“0010”,同樣的,“0111”表示該模組有增、改、查功能;4. 系統使用者表:
該表中“角色許可權等級”—>應與“所屬角色”中的許可權等級保持一致,之所以該表中重複該欄位,是為了方便查詢。角色許可權等級取值:
  1. 公司領導:company_id不能為空;  2. 部門領導:company_id、dept_id不能為空;  3. 普通員工:company_id、dept_id、staff_id不能為空;

登入執行過程1. 系統登入時,首先輸入使用者名稱、密碼;2. 確定訪問許可權:   2.1 判斷該使用者的“角色編號”;   2.2 在“授權定義表”中根據該“角色編號”查詢相應的模組,找到的模組集合即是訪問許可權;3. 確定操作許可權
   3.1 在2.2步驟中查詢到的每個模組都有相應的操作許可權,即構成了每個模組的操作許可權;4. 確定許可權等級   4.1 結合該使用者的“角色許可權等級”+“公司標識”+“部門標識”+“員工標識”,到員工資訊表中去查詢相應員工,具體如下:角色許可權等級取值:   1. 公司領導:查詢<員工資訊表.公司標識==該使用者.公司標識>的所有使用者   2. 部門領導:查詢<員工資訊表.公司標識==該使用者.公司標識 &&                                   員工資訊表.部門標識==該使用者.部門標識>的所有使用者   3. 普通員工:查詢<員工資訊表.公司標識==該使用者.公司標識 &&                                   員工資訊表.部門標識==該使用者.部門標識 &&                                   員工資訊表.員工標識==該使用者.公司標識>的所有使用者