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 に答える