如何实现自定义RoleProvider?

时间:2009-09-30 22:20:36

标签: asp.net-mvc security roles

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

我已经创建了一个自定义MembershipProvider并且它可以工作,因为我能够成功验证用户。下一步是实现RoleProvider,以仅限管理员用户访问certian控制器。

任何人都可以向我简要介绍一下我需要采取的步骤吗?

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

[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
}

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:3)

我将此作为自定义角色管理器的基线: 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)

答案 1 :(得分:2)

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

我怀疑你必须实施 IsUserInRole