1 设计思路
为了设计一套可扩展性强的用户认证管理,需要建立用户、角色、权限等数据库表,并建立它们之间的关系。 具体实现如下。
1.1 用户
用户只是纯粹的用户,用来记录用户相关的信息,比如用户名、密码等,并且他们的权限是分开的。 要拥有特定资源的权限,用户必须与角色关联。
用户通常具有以下属性:
ü 编号,在系统中唯一。
ü 名称,在系统中唯一。
ü 用户密码。
ü 注释,描述用户或角色的信息。
1.2 角色
角色是权限的基本单位。 它具有一定数量的权限。 用户权限是通过角色授予的。 他们通常具有以下属性:
ü 编号,在系统中唯一。
ü 名称2d素材,在系统中唯一。
ü 评论,描述角色信息
1.3 权限
权限是指用户根据自己的角色可以获得对程序某些功能的操作游戏素材下载 免费,例如读、写、修改、删除文件的能力。 他们通常具有以下属性:
ü 编号,在系统中唯一。
ü 名称,在系统中唯一。
ü 注释,描述权限信息
1.4 用户与角色的关系
一个用户(User)可以属于多个角色(Role),一个角色组也可以有多个用户。 用户角色是用来描述其之间从属关系的对象。用户对与角色关联的某些资源具有权限,例如
l用户:
用户 ID 用户名 用户密码
1 张 Sanxxxxxx
2 李丝xxxxxx
……
l角色:
角色ID 角色名称 角色注释
01 系统管理员监控系统维护管理员
02监控人员在线监控人员
03调度人员调度人员
04普通员工
……
l 用户角色(User_Role):
UserRoleID UserID RoleID UserRoleNote
1 1 01 用户“张三”被分配为“系统管理员”角色
22 02 用户“李思”被分配角色“监控人员”
32 03 用户“李思”被分配给角色“调度员”
……
从关系表中可以看出,用户所拥有的特定资源可以通过用户角色进行关联。
1.5 权限与角色的关系
一个角色可以有多个权限,一个权限可以分配给多个角色。 例如:
l 角色:
角色ID 角色名称 角色注释
01 系统管理员监控系统维护管理员
02监控人员在线监控人员
03调度人员调度人员
04普通员工
……
l 权限:
权限ID 权限名称 权限备注
0001 添加监控 允许添加监控对象
0002 修改监控 允许修改监控对象
0003 删除监控允许删除监控对象
0004 查看监控信息允许查看监控对象
……
l 角色权限(Role_Permission):
RolePermissionID RoleIDPermissionIDRolePermissionNote
1010001 角色“系统管理员”拥有“添加监控”权限
2010002 角色“系统管理员”拥有“修改监控”权限
3010003 角色“系统管理员”拥有“删除监控”权限
4010004 角色“系统管理员”具有“查看监控”权限
5020001 角色“监控人员”拥有“添加监控”权限
6020004 角色“监控”有“查看监控”权限
……
从上例中的角色权限关系可以看出,角色权限可以建立角色与权限的对应关系。
1.6 建立用户权限
用户权限系统的核心由以下三部分组成:创建权限、分配权限和使用权限。
第一步是创建者创建权限(Permission),权限在创建者设计和实现系统时进行划分。 使用存储过程CreatePermissionInfo(@PermissionName,@PermissionNote)创建权限信息并指定系统模块具有哪些权限。
第二步角色权限设计5张表,系统管理员(Administrator)创建用户和角色,并指定用户角色(User-Role)和角色权限(Role-Permission)之间的关系。
1)管理员具有创建用户、修改用户、删除用户的功能:
l 存储过程CreateUserInfo(@UserName,@UserPwd)创建用户信息;
l 存储过程ModifyUserInfo(@UserName,@UserPwd)修改用户信息;
l 存储过程DeleteUserInfo(@UserID)删除用户信息;
2)管理员具有创建角色和删除角色的功能:
l 存储过程CreateRoleInfo(@RoleName,@RoleNote)创建角色信息;
l 存储过程DeleteRoleInfo(@RoleID)删除角色信息;
3)管理员具有建立用户与角色、角色与权限关系的功能:
l 存储过程GrantUserRole(@UserID,@RoleID,@UserRoleNote)建立用户和角色之间的关系;
l 存储过程DeleteUserRole(@UserRoleID)删除用户和角色的关联;
l 存储过程GrantRolePermission(@RoleID,@PermissionID,@RolePermissionNote)建立角色和权限的关系;
l 存储过程DeleteRolePermission(@RolePermissionID)删除角色和权限的关联;
第三步,用户(User)使用Administrator分配的权限来使用各个系统模块。 使用存储过程 GetUserRole(@UserID, @UserRoleID 输出)、GetRolePermission(@RoleID,@Role-
-PermissinID输出)获取用户使用模块的权限。
1.7 用户认证实现
当用户验证通过后,系统自动生成128位的TicketID并保存在用户数据库表中,并建立存储过程Login(@UserID、@UserPwd、@TicketID输出)进行用户认证。 如果认证通过,则获取TicketID,否则TicketID为空。 流程图如下:
图1 登录流程图
客户端获取到TicketID后角色权限设计5张表,在调用服务端方法时传递该TicketID,通过存储过程JudgeTicketPermission(@TicketID,@PermissionID)判断该TicketID对应的用户的权限,并根据其权限进行方法调用。
当用户退出系统时,创建一个存储过程Logout(@UserID)来退出系统。 当用户异常退出系统时,根据上次登录时间(LastSignTime)确定用户的TicketID,并建立存储过程ExceptionLogout(@UserID,@LastSignTime)来处理用户的异常退出。
图2 注销流程图
WebService 可以使用 SoapHeader 写入 TicketID,将 TicketID 从客户端传递到服务器。 .Net Remoting 可以使用 CallContext 类将 TicketID 从客户端传递到服务器。
2 数据库设计
2.1 数据库表
图3 数据库关系图
2.2 数据库表说明
2.2.1 用户表(Static_User)
2.2.2 角色表(Static_Role)
2.2.3 用户角色表(Static_User_Role)
2.2.4 权限表(Static_Permission)
2.2.5 角色权限表(Static_Role_Permission)
技术概述
3.1 Web服务SoapHeader
针对 SQL 数据库执行自定义身份验证和授权。 在这种情况下,您应该将自定义凭据(例如用户名和密码)传递给服务,并让服务自行处理身份验证和授权。轻松将附加信息与请求一起传递到 xml Web 服务