用戶認證管理設計方案
設計思路
為了設計一套具有較強可擴展性的用戶認證管理
需要建立用戶
角色和權限等數據庫表
並且建立之間的關系
具體實現如下
用戶
用戶僅僅是純粹的用戶
用來記錄用戶相關信息
如用戶名
密碼等
權限是被分離出去了的
用戶(User)要擁有對某種資源的權限
必須通過角色(Role)去關聯
用戶通常具有以下屬性
ü 編號
在系統中唯一
ü 名稱
在系統中唯一
ü 用戶口令
ü 注釋
描述用戶或角色的信息
角色
角色是使用權限的基本單位
擁有一定數量的權限
通過角色賦予用戶權限
通常具有以下屬性
ü 編號
在系統中唯一
ü 名稱
在系統中唯一
ü 注釋
描述角色信息
權限
權限指用戶根據角色獲得對程序某些功能的操作
例如對文件的讀
寫
修改和刪除功能
通常具有以下屬性
ü 編號
在系統中唯一
ü 名稱
在系統中唯一
ü 注釋
描述權限信息
用戶與角色的關系
一個用戶(User)可以隸屬於多個角色(Role)
一個角色組也可擁有多個用戶
用戶角色就是用來描述他們之間隸屬關系的對象
用戶(User)通過角色(Role)關聯所擁有對某種資源的權限
例如
l 用戶(User)
UserID UserName UserPwd
張三 xxxxxx
李四 xxxxxx
……
l 角色(Role)
RoleID RoleName RoleNote
系統管理員 監控系統維護管理員
監控人員 在線監控人員
調度人員 調度工作人員
一般工作人員 工作人員
……
l 用戶角色(User_Role)
UserRoleID UserID RoleID UserRoleNote
用戶
張三
被分配到角色
系統管理員
用戶
李四
被分配到角色
監控人員
用戶
李四
被分配到角色
調度人員
……
從該關系表可以看出
用戶所擁有的特定資源可以通過用戶角色來關聯
權限與角色的關系
一個角色(Role)可以擁有多個權限(Permission)
同樣一個權限可分配給多個角色
例如
l 角色(Role)
RoleID RoleName RoleNote
系統管理員 監控系統維護管理員
監控人員 在線監控人員
調度人員 調度工作人員
一般工作人員 工作人員
……
l 權限(Permission)
PermissionID PermissionName PermissionNote
增加監控 允許增加監控對象
修改監控 允許修改監控對象
刪除監控 允許刪除監控對象
察看監控信息 允許察看監控對象
……
l 角色權限(Role_Permission)
RolePermissionID RoleID PermissionID RolePermissionNote
角色
系統管理員
具有權限
增加監控
角色
系統管理員
具有權限
修改監控
角色
系統管理員
具有權限
刪除監控
角色
系統管理員
具有權限
察看監控
角色
監控人員
具有權限
增加監控
角色
監控人員
具有權限
察看監控
……
由以上例子中的角色權限關系可以看出
角色權限可以建立角色和權限之間的對應關系
建立用戶權限
用戶權限系統的核心由以下三部分構成
創造權限
分配權限和使用權限
第一步由Creator創造權限(Permission)
Creator在設計和實現系統時會劃分
利用存儲過程CreatePermissionInfo(@PermissionName
@PermissionNote)創建權限信息
指定系統模塊具有哪些權限
第二步由系統管理員(Administrator)創建用戶和角色
並且指定用戶角色(User-Role)和角色權限(Role-Permission)的關聯關系
)Administrator具有創建用戶
修改用戶和刪除用戶的功能
l 存儲過程CreateUserInfo(@UserName
@UserPwd)創建用戶信息
l 存儲過程ModifyUserInfo(@UserName
@UserPwd)修改用戶信息
l 存儲過程DeleteUserInfo(@UserID)刪除用戶信息
)Administrator具有創建角色和刪除角色的功能
l 存儲過程CreateRoleInfo(@RoleName
@RoleNote)創建角色信息
l 存儲過程DeleteRoleInfo(@RoleID)刪除角色信息
)Administrator具有建立用戶和角色
角色和權限的關聯關系功能
l 存儲過程GrantUserRole(@UserID
@RoleID
@UserRoleNote)建立用戶和角色的關聯關系
l 存儲過程DeleteUserRole(@UserRoleID)刪除用戶和角色的關聯關系
l 存儲過程GrantRolePermission(@RoleID
@PermissionID
@RolePermissionNote)建立角色和權限的關聯關系
l 存儲過程DeleteRolePermission(@RolePermissionID)刪除角色和權限的關聯關系
第三步用戶(User)使用Administrator分配給的權限去使用各個系統模塊
利用存儲過程GetUserRole(@UserID
@UserRoleID output)
GetRolePermission(@RoleID
@Role
PermissinID output)獲得用戶對模塊的使用權限
用戶認證實現
當用戶通過驗證後
由系統自動生成一個
位的TicketID保存到用戶數據庫表中
建立存儲過程Login(@UserID
@UserPwd
@TicketID output)進行用戶認證
認證通過得到一個TicketID
否則TicketID為null
其流程圖如下
圖
Login流程圖
得到TicketID後
客戶端在調用服務端方法時傳遞TicketID
通過存儲過程JudgeTicketPermission(@TicketID
@PermissionID)判斷TicketID對應的用戶所具有的權限
並根據其權限進行方法調用
當用戶退出系統時
建立存儲過程Logout(@UserID)來退出系統
當用戶異常退出系統時
根據最後的登陸時間(LastSignTime)確定用戶的TickeID
建立存儲過程ExceptionLogout(@UserID
@LastSignTime)處理用戶的異常退出
圖
Logout流程圖
WebService可以采用SoapHeader中寫入TicketID來使得TicketID從客戶端傳遞給服務端
Net Remoting可以采用CallContext類來實現TicketID從客戶端傳遞給服務端
數據庫設計
數據庫表
圖
數據庫關系圖
數據庫表說明
用戶表(Static_User)
角色表(Static_Role)
用戶-角色表(Static_User_Role)
權限表(Static_Permission)
角色-權限表(Static_Role_Permission)
技術概要
WebService SoapHeader
對 SQL 數據庫執行自定義身份驗證和授權
在這種情況中
應向服務傳遞自定義憑據(如用戶名和密碼)
並讓服務自己處理身份驗證和授權
將額外的信息連同請求一起傳遞給 XML Web 服務的簡便
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26525.html