關於收集的用戶和角色的資料

設計表:    

Users     用戶表   字段:userid,username,userpermission    

Roles     角色表   字段:roleid,rolename,rolepermission    

 UserInRole   用戶角色對應表   字段:userid,roleid    

PermissionList   權限列表   字段:permissionid,permissionDescription,permissionGroup        

權限設計:許可、禁止和未設置三種狀態,Allow,Deny,Not   Set         目標:     實現用戶權限的定義。     首先定義角色權限,用戶與角色間是多對多的關係。用戶權限繼承自角色權限。    

 情況一:用戶所屬的多個角色存在權限衝突時,取最小權限,即某權限角色A許可,角色B禁止,則該權限爲禁止。    

情況二:用戶所屬的角色均未對某權限進行設置時,即NotSet狀態,則該權限同DENY    

情況三:用戶所屬的角色對某權限爲許可時,也可單獨設置該權限爲禁止。         功能:     設置用戶權限:       默認情況下,用戶權限繼承自所屬角色的權限       可單獨設置某用戶的權限     擴展權限       權限定義可隨時增加,並可以分組。當增加權限時,默認的角色權限均爲未設置狀態  

 permissionlist中數據如下:     permissionid,permissionDescription,permissionGroup    

1,   AddUser   ,   用戶管理組  

  2,   DelUser   ,   用戶管理組    

3,   EditUser   ,   用戶管理組    

4,   AddRole   ,   角色管理    

5,   DelRole   ,   角色管理    

6,   EditRole   ,   角色管理    

7,   AddMember   ,   角色管理    

 8,   RemoveMember   ,   角色管理         角色中定義一個賬號管理員的角色.這個角色專門用來添加/刪除用戶的     則其權限爲1,2,3許可,其他未設置     另一個角色管理員,權限爲4,5,6,7,8爲許可,其他未設置.     則     若用戶A同時屬於兩個角色時,則擁有全部權限    

我原來的想法是設置userpermission爲binary字段,存取長的二進制數.權限可按位取.     如賬號管理員的角色權限值爲11100000,         角色管理員的角色權限值爲00011111,     則用戶A的權限爲兩個角色的按位進行或運算的值爲11111111.     但編程實現起來好像很不方便.     而且存成binary字段的話,要將長串0101的字符做爲二進制數存進SQL數據庫,好像實現起來也不那麼容易.因爲要將0101的字符串轉爲int型,大點也就是bigint型,受其大小限制,01字符串的長度不可能超過30位.也就是權限定義不超過30個.所以不知道怎麼搞了.     再則,當用戶所屬的角色過多時,或運算量就可能會比較大,可能會影響程序性能.當然,用戶權限在繼承自角色權限時,就只運行一次或運算,之後將其權限值存入userpermission中,這樣或許會加強一點點性能.  

 

用戶認證管理設計方案

1 設計思路
爲了設計一套具有較強可擴展性的用戶認證管理,需要建立用戶、角色和權限等數據庫表,並且建立之間的關係,具體實現如下。
1.1 用戶
用戶僅僅是純粹的用戶,用來記錄用戶相關信息,如用戶名、密碼等,權限是被分離出去了的。用戶(User)要擁有對某種資源的權限,必須通過角色(Role)去關聯。
用戶通常具有以下屬性:
ü         編號,在系統中唯一。
ü         名稱,在系統中唯一。
ü         用戶口令。
ü         註釋,描述用戶或角色的信息。
1.2 角色
角色是使用權限的基本單位,擁有一定數量的權限,通過角色賦予用戶權限,通常具有以下屬性:
ü         編號,在系統中唯一。
ü         名稱,在系統中唯一。
ü         註釋,描述角色信息
1.3 權限
       權限指用戶根據角色獲得對程序某些功能的操作,例如對文件的讀、寫、修改和刪除功能,通常具有以下屬性:
ü         編號,在系統中唯一。
ü         名稱,在系統中唯一。
ü         註釋,描述權限信息
1.4 用戶與角色的關係
一個用戶(User)可以隸屬於多個角色(Role),一個角色組也可擁有多個用戶,用戶角色就是用來描述他們之間隸屬關係的對象。用戶(User)通過角色(Role)關聯所擁有對某種資源的權限,例如
l         用戶(User):
UserID      UserName      UserPwd
1                   張三                 xxxxxx
2                   李四                 xxxxxx    
……
l         角色(Role):
RoleID           RoleName          RoleNote
       01                  系統管理員       監控系統維護管理員
       02                  監控人員          在線監控人員
       03                  調度人員          調度工作人員
       04                  一般工作人員   工作人員
       ……
l         用戶角色(User_Role):
UserRoleID           UserID           RoleID           UserRoleNote
1                       1                   01                  用戶“張三”被分配到角色“系統管理員”
2                        2                   02                  用戶“李四”被分配到角色“監控人員”
3                        2                   03                  用戶“李四”被分配到角色“調度人員”
……
       從該關係表可以看出,用戶所擁有的特定資源可以通過用戶角色來關聯。
1.5 權限與角色的關係
一個角色(Role)可以擁有多個權限(Permission),同樣一個權限可分配給多個角色。例如:
l         角色(Role):
RoleID           RoleName          RoleNote
       01                  系統管理員       監控系統維護管理員
       02                  監控人員          在線監控人員
       03                  調度人員          調度工作人員
       04                  一般工作人員   工作人員
       ……
l         權限(Permission):
PermissionID      PermissionName       PermissionNote
0001                        增加監控                 允許增加監控對象
0002                        修改監控                 允許修改監控對象
0003                        刪除監控                 允許刪除監控對象
0004                        察看監控信息       允許察看監控對象
……
l         角色權限(Role_Permission):
RolePermissionID   RoleID PermissionID RolePermissionNote
1                             01            0001        角色“系統管理員”具有權限“增加監控”
2                             01            0002        角色“系統管理員”具有權限“修改監控”
3                             01            0003        角色“系統管理員”具有權限“刪除監控”
4                             01            0004        角色“系統管理員”具有權限“察看監控”
5                             02            0001        角色“監控人員”具有權限“增加監控”
6                             02            0004        角色“監控人員”具有權限“察看監控”
……
       由以上例子中的角色權限關係可以看出,角色權限可以建立角色和權限之間的對應關係。
1.6 建立用戶權限
用戶權限系統的核心由以下三部分構成:創造權限、分配權限和使用權限
第一步由Creator創造權限(Permission),Creator在設計和實現系統時會劃分。利用存儲過程CreatePermissionInfo(@PermissionName,@PermissionNote)創建權限信息,指定系統模塊具有哪些權限。
第二步由系統管理員(Administrator)創建用戶和角色,並且指定用戶角色(User-Role)和角色權限(Role-Permission)的關聯關係。

1)        具有創建用戶、修改用戶和刪除用戶的功能: Administrator

l         存儲過程CreateUserInfo(@UserName,@UserPwd)創建用戶信息;
l         存儲過程ModifyUserInfo(@UserName,@UserPwd)修改用戶信息;
l         存儲過程DeleteUserInfo(@UserID)刪除用戶信息;

2)        具有創建角色和刪除角色的功能: Administrator

l         存儲過程CreateRoleInfo(@RoleName,@RoleNote)創建角色信息;
l         存儲過程DeleteRoleInfo(@RoleID)刪除角色信息;
3)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)獲得用戶對模塊的使用權限。
1.7 用戶認證實現
當用戶通過驗證後,由系統自動生成一個128位的TicketID保存到用戶數據庫表中,建立存儲過程Login(@UserID,@UserPwd, @TicketID output)進行用戶認證,認證通過得到一個TicketID,否則TicketID爲null。其流程圖如下:
圖1 Login流程圖
得到TicketID後,客戶端在調用服務端方法時傳遞TicketID,通過存儲過程JudgeTicketPermission(@TicketID,@PermissionID)判斷TicketID對應的用戶所具有的權限,並根據其權限進行方法調用。
當用戶退出系統時,建立存儲過程Logout(@UserID)來退出系統。當用戶異常退出系統時,根據最後的登陸時間(LastSignTime)確定用戶的TickeID,建立存儲過程ExceptionLogout(@UserID,@LastSignTime)處理用戶的異常退出。
圖2 Logout流程圖
WebService可以採用SoapHeader中寫入TicketID來使得TicketID從客戶端傳遞給服務端。.Net Remoting可以採用CallContext類來實現TicketID從客戶端傳遞給服務端。
2 數據庫設計
2.1 數據庫表
圖3 數據庫關係圖
2.2 數據庫表說明
2.2.1 用戶表(Static_User)
Static_User

Static_User字段名

詳細解釋

類型

備註

UserID

路線編號

varchar(20)

PK

UserName

用戶名稱

varchar(20)

 

UserPwd

用戶密碼

varchar(20)

 

LastSignTime

最後登陸時間

datatime

 

SignState

用戶登陸狀態標記

int

 

TickeID

驗證票記錄編號

varchar(128)

 

 

 

 

 

2.2.2 角色表(Static_Role)
Static_Role

Static_User字段名

詳細解釋

類型

備註

RoleID

角色編號

varchar(20)

PK

RoleName

角色名稱

varchar(20)

 

RoleNote

角色信息描述

varchar(20)

 

 

 

 

 

2.2.3 用戶-角色表(Static_User_Role)
Static_User_Role

Static_User字段名

詳細解釋

類型

備註

UserRoleID

用戶角色編號

varchar(20)

PK

UserID

用戶編號

varchar(20)

FK

RoleID

角色編號

varchar(20)

FK

UserRoleNote

用戶角色信息描述

varchar(20)

 

 

 

 

 

2.2.4 權限表(Static_Permission)
Static_Permission

Static_User字段名

詳細解釋

類型

備註

PermissionID

編號

varchar(20)

PK

PermissionName

權限名稱

varchar(20)

 

PermissionNote

全息信息描述

varchar(20)

 

 

 

 

 

2.2.5 角色-權限表(Static_Role_Permission)
Static_Role_Permission

Static_User字段名

詳細解釋

類型

備註

RolePermissionID

角色權限編號

varchar(20)

PK

RoleID

角色編號

varchar(20)

FK

PermissionID

權限編號

varchar(20)

FK

RolePermissionNote

角色權限信息描述

varchar(20)

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章