1. 程式人生 > >許可權設計-系統登陸使用者許可權設計

許可權設計-系統登陸使用者許可權設計

需求分析-場景:

假設需要為公司設計一個人員管理系統,併為各級領導及全體員工分配系統登入賬號.有如下幾個要求:

1.許可權等級不同:公司領導登入後可檢視所有員工資訊,部門領導登入後只可檢視部門員工資訊,員工登入後只可檢視自己的資訊. 

2.訪問許可權不同;如公司領導登入後,可檢視員工薪水分佈介面,而員工則不能看到;

3.操作許可權不同:如系統管理員可以在資訊釋出介面進行增刪改查釋出資訊,而普通員工只可以在資訊釋出介面進行檢視,不能修改.刪除和新增.

 

功能分析

1.登入一個系統,基本都要輸入使用者名稱,密碼;

2.每個使用者的角色不同,則其訪問許可權一般也不同,,如:系統管理員:可檢視所有介面;普通使用者:只能檢視部分介面.

3.不同的使用者,及時可以檢視同樣的介面,但在該介面上可進行的操作許可權也不同,如

使用者1:可在介面1上進行增刪改查;

使用者2:只可以在介面以上檢視,不具備增刪改功能;

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. 普通員工:查詢<員工資訊表.公司標識==該使用者.公司標識 &&                                    員工資訊表.部門標識==該使用者.部門標識 &&                                    員工資訊表.員工標識==該使用者.公司標識>的所有使用者;