【问题标题】:How can I Implement a Custom RoleProvider?如何实现自定义 RoleProvider?
【发布时间】:2010-12-02 19:47:53
【问题描述】:

我正在尝试在我的 ASP.NET MVC 应用程序中实现自定义 RoleProvider。

我创建了一个自定义 MembershipProvider 并且它有效,因为我能够成功验证用户。下一步是实现 RoleProvider 以限制对某些控制器的访问仅限于管理员用户。

谁能提供我需要采取的步骤的简要概述?

我现在的重点是我的控制器带有授权过滤器,如下所示:

[Authorize(Roles="Admin")]
public class AdminOnlyController : Controller
{ 
    // stuff 
}

我有我的 CustomRoleProvider 类,带有以下方法以及一些未实现的方法:

public override string[] GetRolesForUser(string username)
{
    if (username == "dave")
    {
        return new string[] { "Admin" };
    }
}

我想我需要以某种方式将用户添加到角色,但我不知道该怎么做。理想情况下,最终结果将是未经授权的用户无法访问某些控制器的情况,我在我的视图中可以确定是否显示类似以下内容的链接:

if (User.IsInRole("Admin"))
{
    // show links to Admin Controllers
}

谁能指出我正确的方向?

【问题讨论】:

    标签: asp.net-mvc security roles


    【解决方案1】:

    对于未实现的方法,请务必抛出 NotImplementedException。这应该可以帮助您确定自定义提供程序中需要哪些方法来完成工作。

    我怀疑你必须实现 IsUserInRole

    【讨论】:

      【解决方案2】:

      我将此用作自定义角色管理器的基线:http://davidhayden.com/blog/dave/archive/2007/10/17/CreateCustomRoleProviderASPNETRolePermissionsSecurity.aspx

      应该在 MVC 或 Web 表单中工作。

      更新:由于该网页不再存在,您可以尝试使用this one。基本要求是你需要实现RoleProvider接口,即:

      void AddUsersToRoles(string[] usernames, string[] roleNames)
      string[] GetRolesForUser(string id)
      bool RoleExists(string roleName)
      

      【讨论】:

      • 此链接不再有效。如果这可以更新,那就太好了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-17
      相关资源
      最近更新 更多