我正在尝试在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
}
有人能指出我正确的方向吗?
答案 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 。