角色管理与授权机制

上传人:艾力 文档编号:54570345 上传时间:2018-09-15 格式:PPTX 页数:57 大小:887.62KB
返回 下载 相关 举报
角色管理与授权机制_第1页
第1页 / 共57页
角色管理与授权机制_第2页
第2页 / 共57页
角色管理与授权机制_第3页
第3页 / 共57页
角色管理与授权机制_第4页
第4页 / 共57页
角色管理与授权机制_第5页
第5页 / 共57页
点击查看更多>>
资源描述

《角色管理与授权机制》由会员分享,可在线阅读,更多相关《角色管理与授权机制(57页珍藏版)》请在金锄头文库上搜索。

1、角色管理和授权机制,用户与角色的关系: 一个用户可以拥有多个角色,一个角色也可以赋给多个用户,是多对多的关系。,用户 a,用户 b,用户 c,角色 a,角色 b,角色 c,角色 d,理论基础,角色与权限的关系: 角色是权限的集合,一个权限可分属不同的角色,是多对多的关系。,角色 1,角色 2,权限 a,权限 b,权限 c,权限 f,权限 g,权限 h,权限 d,权限 e,权限 i,用户权限配置管理流程,创建角色,授权于角色,角色,创建用户,用户,M : N,M : N,权限管理的数据表设计,用户表,角色表,权限表,用户-角色表,角色-权限表,权限控制粒度,粗粒度,细粒度,1、 Web用户与权限

2、管理概述,Web用户权限管理,Web用户权限管理,简单地说,要解决两个任务: 身份验证(authentication):即确定访问网站的用户身份,解决“用户是谁”的问题; 使用权限(authorization):即在用户身份确定之后,授予他一定的权限,允许他使用特定的服务,这是解决“用户能干什么”的问题。,8,ASP.NET身份验证方式,ASP.NET应用程序可以使用以下四种身份验证方式,9,在实际的Web项目,多采用Forms身份验证。,理解基于Form的ASP.NET身份验证,web.config如下: 先访问登录网页Login.aspx,成功后自动跳转到网站主页default.aspx,

3、10,一个问题浮出水面,在前面的例子中,用户可以通过直接在浏览器中输入URL来绕开登录过程直接访问网站主页。 如何强制用户必须登录后才能访问网站主页?,11,给网站添加访问规则,在待访问的目录中web.config中添加以下设置:,12,上述设置禁止匿名用户访问网站,只允许Admin用户访问。 有了上述设置,现在,用户不登录直接访问网站主页,将会被导航到登录页面。 身份验证确认“你是谁?”,而授权则规定“你能干什么!”,这些可以在web.config中设定身份验证模式和进行授权。,如果我们的用户比较多,那么需要在配置文件中把这些用户全部罗列其中。并且以后添加了新用户,还得继续修改配置,太麻烦了

4、! 通用的做法就是引入角色的概念。,13,进一步理解授权,可以把用户分为特定的种类,每种类型的用户只能做特定的事。 这种用户的分类被称为“角色(Role)”。 角色可以看成是具有特定权限的用户集合。 可以使用“ASP.NET网站配置”工具轻松地给网站添加角色。,14,2 使用ASP.NET网站管理工具,ASP.NET网站管理工具,从VS2010的“网站”菜单中选择“ASP.NET配置”,即可打开ASP.NET网站管理工具。,16,使用网站管理工具,利用网站管理工具,可以给网站添加用户和角色,同时创建访问规则。,17,使用ASP.NET网站配置工具配置网站,使用“ASP.NET网站管理工具”创建

5、了 Admin与User两个角色。 Admin文件夹只允许属于Admin角色的用户访问,User文件夹只针对注册用户开放,匿名用户不允许访问。 网站首页Default.aspx和登录网页Login.aspx则开放给所有的用户访问。 注意查看每个文件夹下的web.config文件。,18,灵活应用Memu控件和配置文件实现不同角色的用户看到的导航菜单是不同的,19,2、配置Web.config,3、配置角色目录下的Web.config,1、设计Web.sitemap,放置Menu控件,放置SitemapDataSource控件,Web.sitemap设计注意事项:,Web.config文件中 s

6、ecurityTrimmingEnabled=“true“ URL不能重复 Role属性的使用,20,3 使用登录控件,ASP.NET登录控件简介,可以使用ASP.NET登录控件快速创建网站用户管理模块,22,Login控件,显示一个用户名与密码文本框,用户输入之后,如果用户名与密码有效,自动导航到其NavigateUrl指定的网页,否则,显示出错信息,要求用户重新输入。,23,当用户登录且成功通过验证,Login控件会触发一个LoggedIn事件。如果用户的登录尝试不成功,如密码错误,Login控件会触发一个LoginError事件。,LoginView控件,可根据角色在同一个网页中显示不同

7、的模板,默认情况下只有两个模板。 AnonymousTemplate:用于匿名用户 LoggedInTemplate:用于登录用户,24,匿名用户视图,注册用户视图,ChangePassword控件,不用多说,一目了然。,25,LoginStatus控件,默认情况下,当用户登录后访问放置了此控件的网页,此控件显示“注销”字样,而用户未登录访问此网页,此控件则显示“登录”字样。具体为哪种状态是由 Page 对象的 Request 属性的 IsAuthenticated 属性决定的。,26,LoginName控件,默认情况下,LoginName 控件显示 Page 类的 User 属性中包含的名称

8、。 如果User.Identity.Name为空,则不呈现控件。,27,CreateUserWizard控件,提供一个向导,用于创建用户。,28,此控件在后台调用MemberShip.CreateUser()来创建用户,有关登录控件,ASP.NET提供的登录控件可与成员资格紧密集成,大大减少了开发工作量。 如果需要创建自定义风格的页面,可以不用这套现成的控件,而完全用传统的HTML元素和ASP.NET标准控件重新打造全新的页面。这时,后台可以直接使用现成的成员资格与角色管理组件。,29,总结:Membership数据库结构图,30,4 自定义成员资格与角色管理,问得好,有关“成员资格与角色管理

9、”的看法,默认情况下,成员资格与角色管理的数据放在网站App_Data文件夹下的ASPNETDB.MDF中,定义了相当多的表。,32,在实际开发中,往往网站有自己的数据库,并且希望能保存有关用户的更多的信息。 好像成员资格与角色管理不能修改数据库结构,因此有人认为:ASP.NET的成员资格与角色管理是鸡肋,真的是这样吗?,能不能将成员资格数据库并入本网站数据库?,问题1:,解决方案:,使用C:WindowsMicrosoft.NETFramework64v4.0.30319的aspnet_regsql工具将成员资格数据库移到SQL Server中。(举例说明),34,移植成员资格数据库,在此选

10、择要保存成员资格信息的数据库。,35,修改网站配置文件web.config,添加一个连接字串 设定网站使用特定的成员资格提供程序: ,36,使用指定的连接字串,移除默认的提供程序,使用新的提供程序,配置角色管理提供程序,在Web.Config中添加以下设置参数: 注意上面的type元素,其值是从“machine.config”文件中获取的。,37,能不能添加扩充的用户信息?,问题2:,解决方案,所有的成员资格用户信息都有一个标识,39,这个用户标识是一个GUID字串,不可能重复。 方法1:构建用户扩展表 利用此标识,根据实际情况可以在数据库中另外创建一个自定义用户表以保存一些扩充信息,这个表与

11、成员资格的用户表之间使用此用户标识进行关联。 方法2:利用Membership表中空闲的多余字段 因此,既可以利用ASP.NET现有的成员资格组件以减少开发工作量,同时又能兼顾实际需要。,MembershipUser user = Membership.GetUser(“sa“); if(user!=null) Response.Write(user.ProviderUserKey);,Membership表,40,User表,ASP.NET成员资格与角色管理框架剖析,http:/ System.Web.Security,MemberShip类:提供了一系列的静态方法与属性,完成创建用户、管理

12、密码以及身份验证的功能。 MemberShipUser类:代表单个的用户权限信息,该对象公开成员资格用户的相关信息(如电子邮件地址),并为成员资格用户提供功能(如更改或重置其密码的功能)。 Roles类:提供了一系列的静态方法与属性,完成角色管理的相关功能,例如,将某个用户加入到特定的角色中。,42,在网站中集成用户管理功能,在网页中,可以直接使用MemberShip的一系列静态方法来管理用户,如创建新用户、删除一个用户、更新用户信息等。例如: Membership.CreateUser(“username“, “password“); Membership.DeleteUser(“usern

13、ame“); 这就使人们可以很方便地在网页中集成用户管理的功能(如在页面上提供注册新用户账号的功能),43,提取用户信息,MemberShipUser封装了用户信息,例如,以下代码查找管理员用户sa,并且输出其登录信息:,44,MembershipUser user = Membership.GetUser(“sa“); if(user!=null) Response.Write(“上次登录时间:“ + user.LastLoginDate.ToString();,角色管理,Roles类提供了一系列的静态方法可以完成创建/删除角色,向角色中添加和删除用户,以及查询用户是否属于某个角色等功能。,

14、45,string users= Roles.GetUsersInRole(“Admin“); Roles.AddUserToRole(“username“, “rolename“);,使用这些静态方法,可以很方便地在页面中对用户进行角色鉴别。,用户登录凭据的保存,为了保存用户的登录信息,可以使用Forms-Authentication类的SetAuthCookie方法保存用户的登录凭据: if (Membership.ValidateUser(“username“, “password“) /将用户登录凭据保存到Cookie中 FormsAuthentication.SetAuthCooki

15、e(“username“, true/false); 之后,在网页中就可以通过User.Identity属性来判断用户是否登录。 注销时,调用FormsAuthentication.SignOut()方法,这样,用户的登录凭据就会被删除。以后要访问特定资源,就需要重新登录。,46,Membership不足之处,Membership只能实现目录级的权限控制,也就是说只能控制用户是否能够访问到某个目录或页面,如果还要细分,比如这个用户不能点删除按钮,那个用户不能修改等等这样的权限,即控件级Membership就做不到了,47,用户权限管理系统,用户权限管理系统,1.用户管理 1.1 用户浏览 1.

16、2 新增用户 1.3 删除用户 1.4 分配角色 1.5 修改口令 2.角色管理 2.1 角色浏览 2.2 新增角色 2.3 删除角色 2.4 分配权限,1.用户管理,1.1 用户浏览,1.用户管理,1.2 新增用户,1.用户管理,编辑用户,1.用户管理,角色分配,2.角色管理,2.1 角色浏览,2.角色管理,增加角色,2.角色管理,角色配置,如何实施,在操作前要判断是否具有该权限 OperAuthor authObj = new OperAuthor(); if (authObj.CheckOperAuthor(Int32.Parse(Session“OperatorID“.ToString(), RightConst.R_Role_Search_List) = false) GLOBAL_TOOLS.ShowErrorMessage(this.Response, SystemConst.MSG0001); return; 具体思路?,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号