1

我知道使用 a 的唯一地方RoleProvider是当您使用Authorize属性时。除了我可能专门引用角色的地方之外,我还能在哪里使用 aRoleProvider并且它是否会在任何地方被调用(我的想法类似于登录控件如何自动使用 MembershipProvider)

换句话说,如果我编写自己的角色管理层,但不实现实际的RoleProvider合同,我会错过 ASP.NET 中的哪些内置功能?

4

2 回答 2

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
}

名单还在继续。老实说,这个讨论已经进行了很多次——不要通过创建自己的角色系统来重新发明轮子。只需实现抽象角色提供者并完成它。这是一篇关于ASP.NET 中角色管理背景的好文章。

编辑:在您澄清后,您实际上想知道 RoleProvider 在MVC下如何使您受益,这就是您要寻找的内容:

ASP.NET MVC - 角色提供者的替代品?

于 2011-05-27T18:53:09.923 回答
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 将它们设为默认值时,在运行时您不需要知道系统中可能拥有的任何目标提供程序的详细信息。客户端代码在任何特定提供程序中都是一致的。

希望这可以帮助。

于 2011-05-30T14:58:31.590 回答