membership在vs2003中的应用-Role(二)

来源:互联网 发布:java逆波兰式算法 编辑:程序博客网 时间:2024/04/30 15:42

    今天我们就来看看memberrole中role的使用。
    角色在memberrole中主要的类就是roles,其实是调用的SqlRoleProvider.cs。如果您看了上一篇关于用户的文章,应该就明白了,在memberrole.dll中,有两个sqlprovider,就是SqlMembershipProvider和SqlRoleProvider,主要是为了模块分明,其实大部分情况下我们习惯写一个provider.顾名思义,所有的sql调用存储过程的语句都在这两个类里。我们仔细看看sqlroleProvider就明白了,它的方法CreateRole(),DeleteRole()等等都是对角色的操作。这个类理所当然的囊括了所有的对角色的操作,包括:
    AddUsersToRoles,FindUsersInRole,GetAllRoles,GetRolesForUser,GetUsersInRole,IsUserInRole,RemoveUsersFromRoles,RoleExists,还有属性ApplicationName。一看上面的那些方法我想你肯定知道角色到底能有什么功能了。applicationname是角色控制的应用程序的名称,刚开始的时候有点奇怪,因为所有方法中对它的调用都是this.applicationname,我还以为取的是配置文件中的属性,后来最后才看到applicationname这个公共属性,你看看关于role的那些存储过程会发现,创建application的代码其实都在存储过程内部,你不耳听六路还真的发现不了这么多小兵器。

      虽然SqlRoleProvider.cs里有所有的方法,但为了分层明确,系统还是使用roles这个类来调用SqlRoleProvider里的所有方法,还有

roles类和membership类一样,都是static方法组成的类,不需要实例化,直接调用。以后不再说明。

    我们还是延续上一篇的思路,挑选几个方法在做实验。

    添加角色:
            添加的时候注意applicationname,如果你不设置,系统自动取配置文件中配置节部门的applicationname。但如果你在前面曾经设置过application(不同于默认的),那要想使用默认,也必须使用Roles.ApplicationName再设置,因为这个属性是static的...千万要注意,我因为这个问题耽误了两分钟。
    例子:
    一个textbox,一个button:
        Roles.CreateRole(txtname.Text);//这是默认的application.

   look,是不是很简单。如果你要设置应用程序名,只需要在这句前面加上Roles.ApplicationName="应用程序名";

   判断用户是否在角色中:
          当我们实际应用的时候,要通过判断用户是否属于某个角色才能应用程序,所以这个很实用。
   例子:
   两个textbox,一个button:
          bool test=Roles.IsUserInRole(txtuser.Text,txtrole.Text);
          if(test)
               Response.Write("完全正确");
   写到这里,我真的认为这个类给我们的帮助太大了,你完全不用去管输入的字符是否正确,一旦出现错误如何处理,因为memberrole.dll中的SecUtility类全帮我们处理了。想深入了解的朋友可以到仔细看看这里面的其他类,包括密码,安全和其他。
   只要你前提设置的好了,这个地方实在太简单了,为了不浪费大家的时间。我就不多举例了。其实动手真的是学习最好的方法,我在两个月前看了这个类,但只知道有些基本功能,根本没去研究,现在通过做些小例子,发现自己彻底明白了这个类的真正作用。
    这个类其实就是vs2005中membership的前身,后来我看过vs2005中关于membership的视频课程,发现还是有一定区别的。不过相信原理我们明白了,再怎么样,还是万变不离其宗。
    此处的例子过于简单,只是起一个抛砖引玉的作用,希望大家不要介意。
    membership还有profile的属性,不同的用户看到不同的程序。这个比较复杂,因为没有用到,只是大体看了看介绍.有兴趣的朋友可以更深的研究,抱歉。