0

我正在尝试使用简单的自定义角色提供程序并使用此处的代码: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

这只是来自 Microsoft 的简单样板代码。

当我调试我的应用程序时,我可以看到我的角色提供程序已初始化但是当我尝试检查角色时没有调用任何方法。

[Authorize(Roles="Customer")]

或者

User.IsInRole("Customer")

我在我的角色提供者的几个地方设置了断点,但它们从未被击中。

仅供参考,我使用的是 WebAPI,我没有使用成员资格提供程序,而是通过消息处理程序使用基本身份验证。

http://www.piotrwalat.net/basic-http-authentication-in-asp-net-web-api-using-message-handlers/

基本身份验证运行良好,但我不确定这是否是阻止我的角色提供者被调用的原因。

4

1 回答 1

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

希望这可以帮助某人。

于 2012-12-14T16:06:04.063 回答