ASP.NET中的login控件如何使用


分类:ASP.NET

当前位置: 专业的WEB编程技术网站 > 技术文章 > .NET技术 > 问题集锦 > ASP.NET中login控件如何使用时间:2009-02-04 17:33来源: 作者: 点击:91次专业的WEB编程技术网站,提供技术手册、开发技巧、技术专题等功能,致力于为WEB开发人员提供动力


  


先给出MSDN有关Role Manager的文章,大家可以去看看:



http://msdn2.microsoft.com/en-us/library/ms998314.aspx


 


类似于Profile, 我们仍需要在web.config启动Role Manager。这里插一句,其实我们可以在IIS中配置 ASP.NET的属性,包括我们一起所做的修改均可以界面化实现,其配制按默认存储在WINDOWS/Microsoft.NET/Framework/v2.0.50727/config/web.config ,大家可以先行设置,然后去该文件察看。



在Web.config中配置如下:



<roleManager enabled="true" defaultProvider="SqlRoleManager">



      <providers>



        <add name="SqlRoleManager"



             type="System.Web.Security.SqlRoleProvider"



             connectionStringName="LocalSQLServer"



             applicationName="FBHelper" />



      </providers>



</roleManager>



   


这里要提到的是里面的connectionStringName可设置为你当前 web.config里已定义的连接字符串,不需要重新建立,applicationName 则是你当前系统的名称(解决方案名称)。



 



Ok, 我们启用了Role Manager后,可在前台进行相关的操作。但在此前,我们需要先定义角色。定义一个角色可以采取以下方法:



1) 利用Role Provider在前台代码实现。如下:



using System.Web.Security;



if (!Roles.RoleExists("TestRole"))



{



 Roles.CreateRole("TestRole");



}



2) 在数据库利用存储过程实现。利用 aspnet_roles_createrole实现,如下:



EXEC aspnet_Roles_CreateRole 'ThisApplication', 'NewRole'



EXEC aspnet_UsersInRoles_AddUsersToRoles 'ThisApplication', 'ThisUser', 'NewRole', 8


所创建的Role将会存储在aspnet_roles 中,和aspnet_applications 及aspnet_users中,这个稍后再提。



创建完角色后,我们可以在前台直接将用户分配给一个角色。 比如我们现在需要在注册完一个新用户后,直接给用户分配一个角色。正如上篇文章所讲的,在添加用户的地方( CreateUserWizard1_CreatedUser事件中),我们可以添加以下代码来实现:



// 添加用户实现代码


 



//添加用户至角色中



Roles.AddUserToRole(CreateUserWizard1.UserName, "Dept1");



 


上面的代码中,我是Hard Code了 “Dept1 ”这个角色,这个应该是Role的名称,主要根据自己项目中的设计来定了。



OK,现在我们可以检查一下数据库里发生的情况。角色 的数据主要体现在3个表中,分别是:



       Aspnet_application



       Aspnet_users



       Aspnet_Roles



 我第一次查看的时候,aspnet_roles存储的自然是我们所创建的 Role的信息,但是Role与用户的关系体现在那里呢?后来我看到了 aspnet_user表中多出了一个相同用户,但applicationID 和 UserID不同的数据,依此又查出在aspnet_application 表中添加了一个新的application记录,我才明白,对于一个角色和用户的关系,系统将之定义为一个新的application,即看成一个新的机制,存储于上述的表中,因此在 aspnet_users表中虽然有两条相同用户数据的记录,但是却处于不同的 application.



这是我目前对该机制的一个看法,不知道是不是正确的,还请知道的朋友确认一下。



 



也因此,在我们想要从aspnet_users表中获取用户数据的时候,需要加入相应的条件来进行筛选。但只是获取自己系统用户的时候使用,因为对于 Role系统,前台我们可以利用.NET的 Roles Manager来处理。当然前台的Membership Manager在进行用户操作的时候,操作对象也是自动的指向了系统的用户,而不是角色系统中的用户。例如:删除一个用户时,表中的 Role关系的用户依然存在。出于这种情况,看来需要手工代码来实现删除用户的同时,删除角色与用户的关系,以免数据库出现垃圾数据。



 



最后一步就是看如何在前台利用Role Managers进行角色信息的调用了。



这个很简单,看看帮助就都出来了,这里就举个例子,一看就明白了:



在Login控件中设置好Destination ,例如Default.aspx, 我们需要根据当前角色的不同,跳转到不同的界面,那么我们在Default.aspx 的Page_Load中加入以下代码可以实现:



 protected void Page_Load(object sender, EventArgs e)


    {


        lblMsgRole.Text = "您的角色是 " + Roles.GetRolesForUser(Profile.UserName)[0];



        Response.Write(@"<script   language='javascript'>alert('注意:10秒钟后   页面将自动跳转到您的部门页面!');</script>");



        if (Roles.GetRolesForUser(Profile.UserName)[0].Equals("Dept1"))


        {


            Response.Write(@"<script   language='javascript'>setTimeout('',10000);</script>");



            Response.Write("<meta   http-equiv='refresh'   content='10;URL=./dept1.aspx'>");//


        }


        else


        {


            Response.Write(@"<script   language='javascript'>setTimeout('',10000);</script>");



            Response.Write("<meta   http-equiv='refresh'   content='10;URL=./dept2.aspx'>");//



        }


    }


可以看到,我们可以利用Roles.GetRolesForUser(Profile.UserName)[0]; 来获取当前登录用户的角色信息,在根据角色的内容来做相关的处理。 当然,这只是Roles Manager中的其中一个简单的应用,还有很多功能可以再从MSDN 中获取学习。



通过这两章的内容,应该可以基本上将Login控件应用于自己的系统,并将 .NET预定义的数据库和自己的数据库连接起来,以缩短开发时间。其实我感觉一个Login 控件更像是一个学习控件,一个体现Membership, Roles, Users应用的非常好的控件,当然它也可以很好的应用与系统,但是个人总感觉在该控件还不够灵活,对于一些大中型项目还是自己建立要更好些。



转载请注明来自: http://www.caodong.net/Article/246.html
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值