ASP.NET 2.0 Login控件使用技巧(二) - 角色管理

总结一下角色管理方面的东西。

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

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


在最初的时候,我并没有想着去使用VS的角色管理,而是想自己创建一套自己的角色管理机制,这样可能会更灵活一些,但在后期,我还是改变了,处于学习的理由,我还是认为自己建立一套角色管理机制和权限机制会更加灵活。。

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

在Web.config中配置如下:

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

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

      
< providers >

        
< add  name ="SqlRoleManager"  

             type
="System.Web.Security.SqlRoleProvider"

             connectionStringName
="LocalSQLServer"

             applicationName
="FBHelper"   />

      
</ providers >

</ roleManager >


   

 

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

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

using  System.Web.Security; 

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



 Roles.CreateRole(
" TestRole " ); 

}

2) 在数据库利用存储过程实现。利用aspnet_roles_createrole实现,如下:
所创建的Role将会存储在aspnet_roles中,和aspnet_applications及aspnet_users中,这个稍后再提。

EXEC  aspnet_Roles_CreateRole  ' ThisApplication ' ' NewRole '  

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

 

创建完角色后,我们可以在前台直接将用户分配给一个角色。 比如我们现在需要在注册完一个新用户后,直接给用户分配一个角色。正如上篇文章所讲的,在添加用户的地方(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'> " ); //

        }
    }

 

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

呵呵,Login控件还真是“想说爱你不容易啊”!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值