自定义角色提供程序已启动但未使用?

时间:2012-12-14 14:20:42

标签: asp.net-mvc asp.net-web-api roleprovider

我正在尝试使用简单的自定义角色提供程序并使用此处的代码: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工作得很好,但我不确定这是否会阻止我的角色提供程序被调用。

1 个答案:

答案 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;
            }

希望这有助于某人。