設計表:
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) 具有創建用戶、修改用戶和刪除用戶的功能: Administrator
2) 具有創建角色和刪除角色的功能: Administrator
Static_User字段名 |
詳細解釋 |
類型 |
備註 |
UserID |
路線編號 |
varchar(20) |
PK |
UserName |
用戶名稱 |
varchar(20) |
|
UserPwd |
用戶密碼 |
varchar(20) |
|
LastSignTime |
最後登陸時間 |
datatime |
|
SignState |
用戶登陸狀態標記 |
int |
|
TickeID |
驗證票記錄編號 |
varchar(128) |
|
|
|
|
|
Static_User字段名 |
詳細解釋 |
類型 |
備註 |
RoleID |
角色編號 |
varchar(20) |
PK |
RoleName |
角色名稱 |
varchar(20) |
|
RoleNote |
角色信息描述 |
varchar(20) |
|
|
|
|
|
Static_User字段名 |
詳細解釋 |
類型 |
備註 |
UserRoleID |
用戶角色編號 |
varchar(20) |
PK |
UserID |
用戶編號 |
varchar(20) |
FK |
RoleID |
角色編號 |
varchar(20) |
FK |
UserRoleNote |
用戶角色信息描述 |
varchar(20) |
|
|
|
|
|
Static_User字段名 |
詳細解釋 |
類型 |
備註 |
PermissionID |
編號 |
varchar(20) |
PK |
PermissionName |
權限名稱 |
varchar(20) |
|
PermissionNote |
全息信息描述 |
varchar(20) |
|
|
|
|
|
Static_User字段名 |
詳細解釋 |
類型 |
備註 |
RolePermissionID |
角色權限編號 |
varchar(20) |
PK |
RoleID |
角色編號 |
varchar(20) |
FK |
PermissionID |
權限編號 |
varchar(20) |
FK |
RolePermissionNote |
角色權限信息描述 |
varchar(20) |
|
|
|
|
|