我正在尝试使用简单的自定义角色提供程序并使用此处的代码:http://code.google.com/p/sfckopanka/source/browse/trunk/App_Code/OdbcRoleProvider.cs?r=45
使用以下方法实现:http://msdn.microsoft.com/en-us/library/tksy7hd7(v=vs.100).aspx
这只是微软的简单样板代码。
当我调试我的应用程序时,我可以看到我的角色提供程序已初始化但是当我尝试检查角色时,没有调用任何方法。
[Authorize(Roles="Customer")]
或
User.IsInRole("Customer")
我在我的角色提供者的几个地方放置了断点,但它们从未被击中过。
仅供参考我使用的是WebAPI而我没有使用会员提供商,而是通过消息处理程序使用Basic Auth。
http://www.piotrwalat.net/basic-http-authentication-in-asp-net-web-api-using-message-handlers/
Basic Auth工作得很好,但我不确定这是否会阻止我的角色提供程序被调用。
答案 0 :(得分:0)
回答这个问题,以防它可以帮助别人。在上面链接的Basi Auth代码中有一个PrincipalProvider类。在这个类中,你创建了一个GenericPrincipal,它也接受用户所在的角色,所以我只需要添加一行代码来获取我的角色以提供给GenericPrincipal
public IPrincipal CreatePrincipal(string username, string password)
{
if (!MyRepo.Authentication.ValidateUser(username, password))
{
return null;
}
var identity = new GenericIdentity(username);
//Code to get my roles from my role provider to use when setting principal
string[] roles =Roles.Provider.GetRolesForUser(username);
IPrincipal principal = new GenericPrincipal(identity,roles);
ShopZioRepo.ClearUserCache(ShopZioGlobal.MyCookies.UserID);
var user = ShopZioRepo.GetUserByEmail(username);
ShopZioGlobal.MyCookies.UserID = user.SalesRepID;
ShopZioGlobal.MyCookies.Username = username;
return principal;
}
希望这有助于某人。