在ASP.NET管道中,RoleProvider挂钩到哪里?

时间:2011-05-27 15:11:31

标签: asp.net asp.net-mvc roleprovider asp.net-roles

我所知道的RoleProvider被使用的唯一地方是使用Authorize属性时。我可以在哪里使用RoleProvider并且除了我可能专门引用角色的地方之外的任何地方调用它(我的想法类似于Login控件如何自动使用MembershipProvider)

换句话说,如果我编写自己的角色管理层,但没有实现实际的RoleProvider合同,那么我将错过ASP.NET中的内置功能吗?

2 个答案:

答案 0 :(得分:2)

以下是内置RoleProvider增加值的几种方法:

1:LoginView控件使用角色来允许您向不同的角色显示不同的内容。它将挂钩到RoleProvider中。

使用LoginView控件的角色示例:

<asp:LoginView id="LoginView1" runat="server">
    <RoleGroups>
        <asp:RoleGroup Roles="author">
            <ContentTemplate>
                some content here based on if user is in 'author' role....
            </ContentTemplate>
        </asp:RoleGroup>
        <asp:RoleGroup Roles="editor">
            <ContentTemplate>
                some content here based on if user is in 'editor' role....
            </ContentTemplate>
        </asp:RoleGroup>
    </RoleGroups>
</asp:LoginView>

2:您可以通过web.config设置授予对服务器(即子文件夹等)上的物理路径的访问权限,例如:

<configuration>
  <location path="MemberPages">
    <system.web>
      <authorization>
        <allow roles="members, administrators" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>
  <!-- other configuration settings here -->
<configuration>

3:您可以轻松检测用户角色并在代码中执行操作,例如:

if (User.IsInRole("members"))
{
   //do something
}
else
{
   //do something else
}

列表一直在继续。这个讨论老实说已多次 - 不要通过创建自己的角色系统来重新发明轮子。只需实现抽象角色提供程序并完成它。这是一篇关于Role Management in ASP.NET背景的好文章。

编辑:在您澄清之后,您确实想知道RoleProvider如何在 MVC 下为您带来好处,这就是您要寻找的内容:

ASP.NET MVC - Alternative to Role Provider?

答案 1 :(得分:0)

直截了当地回答您的问题将是“”。 RoleProvider或任何其他提供者不参与ASP.Net的主流管道,ASP.Net请求不需要任何RoleProvider来完成请求。

我没有回答技术材料,而是回答了更为哲学的答案,并尊重KP在答案中所做的努力。

RoleProvider基本上是ASP.Net的一个功能性附加组件,它允许您对角色系统进行操作,而无需在运行时知道任何功能细节。 ASP.Net 2.0引入了一种处理用户和角色的全新方式。而不是提供集成的用户和角色管理,他们决定使其可扩展且易于使用。他们创建了一个名为“Provider”的新模式,并为每个功能(如用户,角色和会话)提供默认提供程序。它们被称为MembershipProvider,RoleProvider和SessionProvider。但是,Microsoft不限制您仅使用ASP.Net 2.0附带的提供程序。您可以定义自己的MembershipProvider并在web.config中将它们声明为默认提供程序。 ProviderBase类会强制您实现每个方法以使您的提供工作具有内聚性,当您从web.config中将它们设置为默认值时,在运行时您无需知道系统中可能包含的任何目标提供程序的详细信息。客户端代码在任何特定提供商中都是一致的。

希望这有帮助。