第八章
成员、角色管理和登录控件
课程目标
基于角色的安全技术的特点
ASP.NET 2.0基于角色的安全技术的特点
基于角色的安全技术的准备工作
利用控件创建安全页
登录成员资格服务
用户管理
角色管理
使用成员资格和角色管理器API
体验项目——<登录验证程序 >
实现了登录验证的功能,用户可以先创建一个自己的账户,然后就可以用此账户登录系统了。
基于角色的安全技术
互联网(Internet)虽然是一个面向全球的开放型网络系统,然而其中有些网页并不是对所有用户都无条件开放的。例如:
一些用于公司内部管理的网页只对公司内部的人员开放;
有些网站设立的收费项目,只对那些进行了注册并交纳了费用的用户开放;
有些商业网站实行“会员制”,只有经过注册的会员,才有权参加某些商业交易活动;
一些远程教育网站允许学生查阅自己的成绩但不允许修改成绩。
类似的情况还可以列出很多,这些情况给网站的设计提出了新的要求:为了网站的合法权益和网络安全,必须对一些特定的网页实施保护;当用户进入时要进行身份认证,并在认证的基础上分配资源。
基于角色的安全技术目前已经成为大多数网站必备的功能,然而设计这项功能并不简单,若使用传统的方法,需要使用十几个标准控件,编写上百行代码,并经过反复的调试才能完成。现在ASP.NET 2.0与IIS服务器相结合,在框架的支持下,对传统的方法做了很大的改进,系统提供了强大的工具和若干组合控件。利用这些工具可以采用简易的方法,快速开发出功能完备的具有基于角色的安全技术的程序。
围绕基于角色的安全技术,本章将讲述以下几方面的内容:
基于角色的安全技术的特点
ASP.NET 2.0基于角色的安全技术的新特点
基于角色的安全技术的准备工作
利用控件创建安全网页
直接调用Membership API 方法
基于角色的安全技术
基于角色的安全技术的特点
ASP.NET 2.0基于角色的安全技术的特点
基于角色的安全技术的准备工作
利用控件创建安全页
直接调用Membership API方法
基于角色的安全技术的特点
网站中可以包括多个入口
基于角色的安全技术是有层次的
网站中可以包括多个入口
在桌面系统中,由于入口点比较集中,因此为了保护某些窗体,主要方法就是先给用户建立注册表,表中载入用户的相关信息,然后在窗体的入口处设置登录界面来检查来访的用户,看看该用户是否在注册表中注册,如果已经注册再看看属于什么身份,然后根据其身份跳转到相应的入口。
然而网站与此不同,它是一个开放型的系统,很多网页都有自己的URL,用户通过URL可以直接访问这些网页,因此网站的入口点很多。这种情况下,即使设置了登录网页,用户还可以绕过它直接进入其他网页。因此,为了保护网页需要给这些网页实施保护,或者先将它们集中到某个子目录下,再给该目录实施保护。
基于角色的安全技术是有层次的
基于角色的安全技术是有层次的。例如,有些网页只对一部分人员开放,而这部分被允许访问的人员中允许访问的范围也是有区别的。应该根据人员的分工或职务进一步给他们分配资源。
为了管理用户,应该先将用户划分成登录用户和非登录用户,再将登录的用户区分成不同的“角色”,并为这些“角色”赋予不同的访问权限。这些权限有的还需要不定时地进行调整。以交费网页为例,用户交费以前和交费以后的访问权限是不同的。
在传统的基于角色的安全技术中,首先要给被保护的网页设置保护措施(如用Session对象进行保护等),并且给用户建立注册表,在注册表中注明用户的姓名、密码以及分配的角色等。
用户的认证实质上是一个查询过程。当用户进入登录页面时,先要求用户输入自己的姓名和密码,然后到注册表中去查询。如果在表中找到了可以匹配的记录时,说明该用户已经进行了注册,然后取出用户对应的角色字段,根据分配给角色的权限让用户转入相应的网页。
ASP.NET 2.0基于角色安全技术特点
在ASP.NET 2.0中,为了进行用户管理和保证网页安全,系统提供了完善的服务。包括提供了一个网站管理工具和7个组合控件。当给网站配置好安全设置以后(见下一个问题)系统还将在应用程序的“App_Data”专用目录下创建专用数据库(通常取名为ASPNETDB.MDF)和若干专用数据表,这些表包括用户的注册信息、角色信息以及为个性服务所需要的信息等。系统不仅自动建立了这些表格,还将自动存入这些信息,在注册表中进行查询等项工作全面地实现了自动化。在这些工具的支持下,设计者只需做一些简单的设置,就能设计出功能比较完备的应用基于角色的安全技术的网页。
在ASP.NET 2.0中基于角色的安全技术包括以下两方面的工作。
1.用户认证方面
创建新用户
登录用户
用户修改密码
恢复用户密码
状态和其他有关信息
2.权限管理方面
给用户划分角色
给角色分配资源
基于角色的安全技术的准备工作
组织好站点中的文件
利用网站管理工具进行安全配置
组织好站点中的文件
为了集中入口点,最好建立若干子目录,并且将安全等级相同的网页放在同一个子目录下,然后在各个子目录的根目录下设置Web.config文件,利用该文件配置安全策略。这就好比一个单位中包括一些需要保密的部分,可以先将它们放到专门的办公楼里,并在办公楼的入口处设立保卫人员以检查来访的用户。Web.config文件就相当于各个办公楼的保卫人员。下图是一个目录分布的示意图。
其中从上而下:
第一个Web.config文件用来保护admin目录下的文件;
第二个Web.config文件用来保护manager目录下的文件;
第三个Web.config文件用来保护网站根目录下的文件;
Web.config文件之间的定义有继承关系,若子目录的定义不同于父目录时,子目录下的文件按照子目录的定义执行。
利用网站管理工具进行安全配置
利用网站管理工具进行安全配置
利用网站管理工具进行安全配置
1. 网站的安全设置包括增加“用户”(User)、定义“角色”(Role)、指定“访问规则”(Access Rule)三大部分。可以利用下面的三个方框分别进行设置,也可以利用系统提供的“安全设置向导”的智能提示逐项进行设置。下面重点介绍使用安全设置向导来设置的 方法。
(1) 选择【使用安全设置向导按部就班地配置安全性】,在出现的对话框中单击【下一步】进入第二步。
(2) 在【选择访问方法】对话框中提供了internet和intranet两种选择,这里选择【通过internet】项,再单击【下一步】。
(3) 在【高级提供程序设置】对话框中提示:若要更改应用程序的数据存储区,请退出【安全向导】,然后单击【提供程序配置】选项卡。使用【提供程序配置】选项卡可以配置网站管理数据的存储方式。这里不改变数据存储区,即仍然使用默认提供的SL Server数据库存储数据。因此只要单击【下一步】即可。
(4) 在步骤4中,系统会询问是否创建基于角色的应用,如果应用中需要用到角色,就必须勾选【为此网站启用角色】复选框,然后单击【下一步】时,进入如图18.4所示的界面。
本界面中表示已经创建了2个角色(如果第一次创建,将不含任何角色),如果需要增加新角色时,先在【新角色名称】输入框中输入新角色名,然后单击【添加角色】按钮即可。如果需要删除某种角色时,只要单击该角色名右方的【删除】即可。处理完成以后单击【下一步】。
(5) 在步骤5中,要求增添新用户,在这一步中可以输入用户名,密码,E-mail等信息。具体做法将在下一节中讲述。单击【下一步】。
(6) 在步骤6中,要求确定访问的规则。此时弹出的界面所示。
利用网站管理工具进行安全配置
图中的左边窗口中列出的是网站的目录,中间窗口的【角色】下拉列表中将列出角色名(下面为用户名),右方为访问权限(允许或拒绝)。将三者结合起来确定某角色(或用户)对某目录的访问权限。操作过程是:先确定角色(或用户),再确定权限,再选择目录,最后单击【添加此规则】按钮。
2.对安全配置的调整
如果需要修改或重新调整安全配置,可以在进入安全配置的初始界面中,选择下面三个选项之一。
用户:用来增添、编辑或删除用户,还可以给用户分配角色;
角色:用来增添、编辑或删除角色;
访问规则:用来增加、编辑或删除访问规则。
为了给用户分配角色,回到配置工具中的【安全】选项卡,单击下面【用户】中的【管理用
户】项进入如图1所示的界面。
分配用户的角色需逐个进行。单击某用户右边的【编辑角色】时,将弹出已经存在的全部角
色,单击复选框选中就代表分配了角色。一个用户可以分配0个或者多个角色。
检查访问权限的分配,回到配置工具中的【安全】选项卡,单击下面【访问规则】中的【管理
访问规则】项进入如图2所示的界面。
单击左边的某个目录,然后查看右边分配的情况。图2中的结果是对于“manager”目录来说,
允许“admin”与“manager”角色访问,但拒绝“sales”角色访问。如果这里显示的规则不符合需
要,单击下面的【添加新访问规则】后进行调整。
右边有【上移】和【下移】两个按钮,可以用来调整规则的顺序。顺序在这里是非常重要的。
因为系统总是从上到下逐个匹配规则的,如果这些规定中存在着矛盾时,只有第一个被匹配的
规则有效。
利用网站管理工具进行安全配置
3.安全配置的结果
上述安全配置产生了两个重要的结果。
(1) 在应用程序的各个目录下分别产生了web.config配置文件,文件中载入了对该目录的访问权限。例如Admin目录的web.config文件如下:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<authorization>
<allow roles="admin" />
<deny roles="manager" />
<deny roles="sales" />
<deny users="*" />
</authorization>
</system.web>
</configuration>
在<authorization>…</authorization>中配置的顺序非常重要,系统总是按照从前向后逐条匹配的办法,并且执行最先的匹配
者。例如前面的顺序颠倒如下:
<authorization>
<deny users="*" />
<allow roles="admin" />
<deny roles="manager" />
<deny roles="sales" />
</authorization>
则所有的用户(包括roles="admin")都不允许访问该目录下的文件。所以应该注意调整好对某个目录配置的顺序。
利用这一特点,我们能够用非常简单的方法来调整用户的访问权限。例如在某些收费项目中,对于没有交费或者交费到期的
用户,只要将该用户的保护字段放在“<deny users="*" />”之后,一旦交了费用时再将它的保护字段放到“<deny users="*" />”
的前面即可,不需要编写任何代码。
代码中“*”代表所有用户;“?”代表匿名用户。
(2) 应用程序的根目录下出现了一个专用的App_Data目录,在该目录下出现了一个专用的SL Server数据库(名为ASPNETDB.MDF)。数据库中包括用于用户管理的若干专用数据表,这些数据表将自动记录登录用户、角色以及它们的相关数据。
利用控件创建安全页
用户登录控件
使用创建新用户控件
登录状态与登录姓名控件
登录视图控件
PasswordRecovery 控件和ChangePassword控件
利用控件创建安全页
ASP.NET 2.0系统提供了一组用户管理控件,这些控件中大多数都不是单一的标准控件,而是多个控件的组合。利用这些控件可以非常方便地完成用户管理和基于角色的安全策略的设计工作。这些控件包括:
Login用户登录控件
CreateUserWizard创建新用户控件
LoginView登录视图控件
LoginName登录用户名控件
LoginStatus登录状态控件
ChangePassword改变密码控件
PasswordRecovery恢复密码控件
这些控件不仅定义了初步外观(可以进一步修改),还定义了标准行为。例如,有的控件可以用来创建用户的注册、登录和密码恢复界面的外形并实现其功能。也有一些控件主要用来向用户显示不同的信息。例如,利用 LoginView 控件可以定义不同的模板,将其显示给不同角色的成员等。
用户登录控件
用户登录控件(Login)是基于角色的安全技术的核心控件。该控件的作用是进行用户认证,确定新到的用户是否已经登录。该控件的界面如图1所示。
该控件对应的代码是:
<asp:Login ID="Login1" Runat="server" />
需要改变界面时,通过属性修改界面中的显示(例如将英文显示改成汉字显示等)。
Login控件实质上是一个“用户控件”,它不仅生成了显示界面,还定义了相应的行为。由于系统已经自动生成了数据表,而且数据表的表名、字段名以及位置都已经固定,因此只要将Login控件拖入到窗体中,不需要编写任何代码,也不需设置任何其他属性就可以使用。
执行Login控件的结果要么登录成功,要么登录失败。
当登录成功时,后续的操作包括:
(1) 转向新页面。Login控件的DestinationPageUrl属性用来设置跳转的页面地址。
(2) 改变视图。利用本页面的LoginView控件改变视图,显示基于角色的不同界面。
(3) 显示登录状态。利用LoginStatus控件显示登录状态,以便随时退出登录状态。
(4) 表示对登录用户的欢迎。利用LoginName控件编写欢迎语句。
登录失败时通常需要进行的操作包括:
(1) 提示错误信息,要求重新登录。Login控件的FailureText属性用来确定登录失败时的提示文本。
(2) 创建新用户。通过CreateUserWizard控件创建新用户,以完成登录前的准备工作。
用户登录控件
(3) 恢复密码。通过PasswordRecovery控件帮助用户恢复密码。
为此在Login控件中最好设置与上述控件相应的页面的链接指针,设置的方法如下:
利用属性CreateUserText和CreateUserUrl相结合指向创建的新用户界面。前者为指针的文本,后者是网页的地址(URL)。
利用属性PasswordRecoveryText和PasswordRecoveryUrl相结合指向恢复密码的网页。前者是指针文本,后者是网页的地址(URL)。
利用属性HelpPageText和HelpPageUrl相结合指向帮助网页。前者是指针文本,后者是网页的地址(URL)。
上述这些属性的设置以及在控件中的显示,如图1所示。
属性“VisibleWhenLoggedIn”用来设置当用户身份验证成功后是否自动隐藏自己。如果将它设为true时,一旦登录成功,Login控件自己将被隐藏起来。
在Login控件中提供了4个事件,利用这些事件可以增强控件的功能。
BeforeLogin:此事件发生在登录表验证之前。利用这一事件可以检查输入数据的语法和格式是否正确,以便及时提示错误并中断后续的操作。
AfterLogin:该事件发生在认证成功之后,这使你能够在登录成功以后附加一些程序以便做进一步处理。
Authenticate:该事件发生在当你想根据事件而提供一个固定的认证模式的时候,你可以详细说明用户数据是否已经被验证成功。通常,你可以利用一个用户个人服务来执行你自己的认证机制。
LoginError:该事件发生在用户输入数据错误,认证停止的时候。利用此事件可以在错误发生,停止认证后做进一步的处理。
使用创建新用户控件
使用创建新用户控件
另外,该控件还有一个强大的功能就是可以在用户完成所有的注册项目之后,自动给用户的邮箱发送用户注册信息的邮件。比如,可以感谢用户登录你的网站等。这些邮件可以包括用户注册的信息(用户名,密码等)。
你可以通过给该控件的MailDefinition属性赋值来配置邮件的发送,这个属性代表了MailDefinition类的一个对象,MailDefinition类包括了定义一封E-mail需要的所有的属性,还可以在根目录下建立一个.txt文件,把文件的路径赋给MailDefinition 属性的BodyFileName,比如,文件名为welcomeEmail.txt。该文件中还可以包含一些特殊的符号如<%username%>和<%userpassword%>用来代替实际的用户名和用户密码,
例如:
欢迎您登录本网站
您的名字是: <%username%>
您的密码是: <%userpassword%>
下面是在CreateUserWizard控件中,为用户完成注册后发送给用户的一封主题为“感谢”的电子邮件而做的设置,邮件的文件名为“welcomeEmail.txt”。
<asp:CreateUserWizard ID="CreateUserWizard1" Runat="server">
<MailDefinition >
BodyFileName="welcomeEmail.txt"
From="mySite@tom.com"
Subject="感谢!"
</MailDefinition>
</asp:CreateUserWizard>
如果要使该控件具有发送电子邮件的功能,必须使它能够发送邮件,为此在MACHINE.CONFIG文件中将看到下面的配置:
<smtpMail
serverName="localhost"
serverPort="25"
/>
使用创建新用户控件
如果安装并激活了一个本地SMTP服务,那么就不需要修改上面配置,如果想用不同的邮件协议,则必须在Web.config文件中修改上面的设置。
CreateUserWizard控件在一些复杂的注册场合中也很有用,比如在授权用户登录你的网站前要验证用户注册的电子邮箱地址是否有效。如果你激活了CreateUserWizard控件的AutoGeneratePassword属性,那么控件就会为用户随机地生成一个密码。利用CreateUserWizard控件的E-mail功能,将这个随机生成的密码送回给用户。要求用户必须使用这个密码才能登录网站。这样,也就验证了用户邮箱地址的有效性。
上述界面中的有些部分实际上取决于在Membership Provider中的设置。例如,uestion和Answer输入框只有当Membership Provider中的reuiresuestionAndAnswer属性设置为true时(默认时即如此)才会显示出来。
当这些设置完成后打开ACCESS或者SLServer数据库中的用户表,可以看到刚刚建立的用户信息已经存储在数据表中了,在这里并没有编写一行代码。这些复杂的功能实际上都被封装到了CreateUser控件之中。
登录状态与登录姓名控件
一般的登录模块,当用户成功登录后,会显示用户当前登录的身份,比如“欢迎XXX用户登录”的提示,而同时会显示“LOGOUT(退出)”的提示。这里可以利用LoginName和LoginStatus控件的帮助来实现这一功能。
LoginName用来显示注册用户的名字,通过FormatString属性可以增加一些格式的描述。如果用户没有被认证,这个控件就不会在页面上产生任何输出。而“LoginStatus(登录状态)”控件则提供了一个方便的超链接,它会根据当前验证的状态,在登录和退出操作之间进行切换,如果用户尚未经过身份验证,则显示指向登录页面的链接。如果用户已经进行了身份验证,则显示使该用户能够退出的链接。利用不同的属性,这两个显示的内容都是可以被修改的。通常可以根据登录和退出的状态在控件上加上照片等个性化的 东西。
这两个控件产生的对应代码分别如下:
<asp:LoginName ID="LoginName1" Runat="server" />
<asp:LoginStatus ID="LoginStatus1" Runat="server" />
在LoginStatus控件中为了能够正确退出,还可以将下面两个属性进行设置。
LogoutAction属性:设成Redirect(默认是Refresh)。
LogoutPageUrl属性:指定退出的网页,通常是用于登录的网页。
登录视图控件
在早期的版本里,区分不同角色、浏览不同页面需要用代码来实现,这样做比较麻烦。现在ASP.NET 2.0提供了一个十分有用的控件就是LoginView。LoginView结合导航控件能够根据当前用户的角色自动显示不同的导航界面,实现基于角色的网站浏览功能。默认情况下该控件只包括两个模板:匿名(未登录)模板(Anonymous)与已登录模板(LoggedIn),可以对匿名用户和已登录的用户分别显示不同的导航界面。如果在应用项目中设置了多个不同的角色时,控件将自动增加多种不同的模板,用来为不同角色显示不同的导航界面。每个登录后的用户将只能按照自己所充当的角色查看自己权限以内可以访问的网页,从而可以直观地保护网页。然而这只是视图上的保护,并不能代替Web.config文件的作用,一些用户还有可能直接利用URL直接进入受保护的网页。因此视图的保护还应该和Web.config相结合才能既有效又方便地保护网页。
下面用一个简单的示例来说明LoginView控件的使用方法。
(1) 将LoginView控件拖入窗体,单击【编辑RoleGroups】,打开角色组编辑窗口,并将已经设置的角色增加到窗口中,情况如图1所示。
(2) 再查看LoginView控件的模板时,将看见除原来的两个模板以外又增加了几个角色的模板。情况如图2所示。
选择不同的模板,放入TreeView控件,分别按照角色的权限显示相应的网页。
(1) 匿名用户的模板(AnonymousTemplate)如图3所示。
(2) 角色为Admin的模板(RoleGroup[0]-Admin)如图4所示。
(3) 角色为Sales的模板(RoleGroup[2]-Sales)如图5所示。
18.4.4 登录视图控件
PasswordRecovery 控件和ChangePassword控件
有开发经验的人都知道,以前如果用户忘记了密码而要重新获得密码是比较麻烦的事情,为了实现这一功能,需要编写代码包括认证用户,查询数据库,修改数据库等。ASP.NET 2.0提供了一个很有吸引力的控件,即PasswordRecovery 控件。该控件能够通过电子邮件来帮助恢复忘记的密码。
要使用该控件,需要具有自动发送邮件的功能,必须像CreateUserWizard控件一样,正确配置Web.config文件。
只要用户在注册时正确地填写了邮箱地址和配置正确,并在该控件里提交了请求,它就会自动把密码发送到你的邮箱中。就像CreateUserWizard控件一样,也可以用 MailDefinition 属性来定义发送给用户的电子邮件的属性,
此控件提供了三种模板。
UserName:用于初始化控件,用户需要在这里填上登录名。
uestion:在用户寻找遗忘的密码时必须回答的问题。
Answer:用在当用户输入的密码正确,或者已经用E-mail发给用户的时候。
在PasswordRecovery控件中还有一些重要的事件。
BeforeUserLookup:当用户查找用户资料的时候被激发。可以设定个人测试条件取消这个过程。
UserLookupError:当用户名不存在时激发。
BeforeAnswerLookup:在用户输入了答案并且被验证后激发。
AnswerLookupError:当输入答案错误时被激发。
BeforeSendMail:在邮件发送之前被激发。
Changepassword控件的用法和PasswordRecovery的相似,它也有MailDefinition 属性,通过设置该属性可以设置发送给用户的邮件格式。
修改密码(Changepassword)控件的界面,如图1所示。
恢复密码(PasswordRecovery)控件的界面,如图2所示。
使用成员资格和角色管理器API
创建用户、登录、注销、修改密码等功能不需要编写一行代码就可以实现,实际上,ASP.NET 2.0是使用Membership、MembershipUser和MembershipProvider类来完成这些功能的。
成员资格
“成员资格”功能围绕两个中心类来生成:Membership和MembershipUser。Membership类提供用于创建用户(由MembershipUser类表示)的方法,以及用于管理用户的常见管理方法。使用 Membership类创建的用户表示一个ASP.NET应用程序经过身份验证的标识。
使用Membership类执行的常见任务包括:
l 创建新的MembershipUser。
l 在用户试图登录时验证用户名–密码组合。然后可以使用“Forms Authentication”(窗体身份验证)发出一个Cookie,指示用户已经登录网站。
l 检索MembershipUser实例。
l 更新MembershipUser实例 。
l 基于各种搜索条件搜索用户 。
l 获取当前在线的经过身份验证的用户的数量 。
l 不再需要某些用户时从系统中删除这些用户。
获取一个MembershipUser实例之后,直接使用MembershipUser类执行的常见任务包括:
l 访问应用程序中MembershipUser类的属性。
l 检索用户密码(仅在成员资格功能被配置成允许密码检索的条件下)。
l 更改用户密码或重置用户密码。
l 更改用户的密码提示问题和密码答案(如果成员资格功能已被配置成在检索或更新密码前提示用户输入密码提示问题和答案)。
l 解除对由于密码错误或密码答案错误而被锁定的用户的锁定。
示例参见书中
角色管理器
角色管理器的中央管理类是Roles类。Roles类提供用于创建角色并将用户分配给角色的方法。它还提供用于管理角色信息的常见管理方法。
使用Roles类执行的常见任务包括:
l 创建新角色。
l 删除现有角色。
l 将用户分配到角色。
l 从角色中移除用户。
l 确定是否已将某个用户授权给某一特定角色。
l 搜索某一特定角色中的用户,以及检索某一角色中的所有用户。
l 获取特定用户的角色信息。
示例参见书中
直接调用Membership API方法
为了对成员身份进行更高级别的控制,可以直接使用 Membership API方法。在System.Web.Security命名空间中主要包括两个类:Roles类和RolePrincipal类。
Membership API 是Membership 类中公有的方法,利用这些方法能够完成以下工作:创建新用户;更改密码;搜索与特定条件匹配的用户;创建角色(CreateRole);删除角色(DeleteRole);读取所有角色(GetAllRoles);读取某个用户分配的角色(GetUsersInRole)和读取某个角色的用户(GetRolesForUser)等。实际上,前面所说的用户管理控件就是使用这些方法来实现用户管理的。
下面举例说明 Membership 类的一些比较常用的方法。
1.创建新用户
先在窗体中创建6个输入窗口以及一个按钮,其中:
TextBox1用于输入新用户名;
TextBox2用于输入新用户密码;
TextBox3用于输入新用户的E-mail;
TextBox4用于输入安全提示问题;
TextBox5用于输入回答问题;
TextBox6用于输入提示错误。
直接调用Membership API方法
按钮的代码如下:
void Button1_Click(object sender, EventArgs e)
{
if (this.IsValid)
{
MembershipCreateStatus status;
MembershipUser user=
Membership.CreateUser(this.TextBox1.Text,this.TextBox2.Text,this.
TextBox3.Text,this.TextBox4.Text, this.TextBox5.Text, false,out status);
switch (status)
{
case MembershipCreateStatus.Success:
FormsAuthentication.RedirectFromLoginPage(user.UserName, false);
break;
case MembershipCreateStatus.DuplicateEmail:
this.TextBox6.Text = "email 地址已经登录";
break;
case MembershipCreateStatus.DuplicateUserName:
this.TextBox6.Text = "用户已经登录";
break;
case MembershipCreateStatus.InvalidEmail:
this.TextBox6.Text = "email 地址格式不对";
break;
case MembershipCreateStatus.InvalidPassword:
this.TextBox6.Text = "密码不对";
break;
case MembershipCreateStatus.UserRejected:
this.TextBox6.Text = "登录失败,原因不清楚" ;
break;
}
}
}
直接调用Membership API方法
2.创建新角色(CreateRole)
void Button1_Click(object sender, EventArgs e)
{
if (this.TextBox1.Text.Length > 0)
{
Roles.CreateRole(this.TextBox1.Text);
}
}
3.删除角色
void Button1_Click(object sender, EventArgs e)
{
Roles.DeleteRole(this.DropDownList2.SelectedItem.Text);
}
4.给用户分配角色
void Button1_Click(object sender, EventArgs e)
{
Roles.AddUserToRole(this.DropDownList1.SelectedItem.Text, this.DropDownList2.SelectedItem.Text);
}
5.从角色中删除用户
void Button1_Click(object sender, EventArgs e)
{
Roles.RemoveUserFromRole(this.DropDownList1.SelectedItem.Text, this.DropDownList2.SelectedItem.Text);
}
本章总结
基于角色的安全技术的特点
ASP.NET 2.0基于角色的安全技术的特点
基于角色的安全技术的准备工作
利用控件创建安全页
登录成员资格服务
用户管理
角色管理
使用成员资格和角色管理器API