0

フォーム認証にロールを使用しようとしています。global.asax Application_AuthenticateRequest メソッドが Cookie からロールを取得しています。これは正常に機能します。しかし、Web.Config で構成するプロバイダーがわかりません。SQL サーバーは使用したくありません。Cookie のみを使用します。

この行は IPrincipal を作成します: (roles はロールの文字列配列です)

Context.User = new GenericPrincipal(Context.User.Identity, roles); 

最終的な目標は、[Authorize(Roles = "Admin")] のような DataAnnotations と IsInRole メソッドを機能させることです。

また、IsInRole メソッドは、global.asax で使用すると正常に機能しますが、他の場所では機能しません。なぜだめですか?

今のところ Web.config は次のように構成されています。

<roleManager defaultProvider="DefaultRoleProvider" cacheRolesInCookie="true">

DefaultProvider は悲しいことに、本当の理由もなく空の SQL データベースに接続されています。

これは可能ですか?

ありがとう。

4

3 に答える 3

0

あなたが言ったことに基づいてあなた自身のプロバイダーを必要としません。したがって、authenticaterequestを読み取って簡単に設定できます。

ここで問題となるのは、それらをどこに保存するかです。それらをどのように保存しますか?それらをCookieにのみ設定しますか?確かに、保持したい永続的なストアがいくつかあります。それ以外の場合は、Cookieがなくなったときに、どのように役割を更新しますか?

于 2012-04-07T05:55:46.157 に答える
0

組み込みのロール プロバイダーを使用して、ロールが Cookie にキャッシュされるように指定しないと、ログイン時にデータベース呼び出しが 1 回だけになり、その後は自動的に Cookie に格納されます。

<roleManager defaultProvider="DefaultRoleProvider" cacheRolesInCookie="true">
于 2012-04-07T06:00:47.490 に答える
0

ASP.NET XmlProvidersを使用することをお勧めします。(データベースなし)

または、単に SQL サービス インスタンスは必要ないが、何らかのタイプのデータベースを使用する利点が必要な場合は、ErikJ の Sql CE MembershipProvider/RoleProvidersを使用します。(ブログでは、CE 4.0 は実稼働の準備ができていないと述べていますが、それはずっと前のことであり、現在は小規模な実稼働環境で使用できます)。

アップデート

確かに、独自のAuthorizeAttributeをロールし、派生した authorize 属性クラスでOnAuthorizeをオーバーライドできます。

于 2012-04-07T05:35:23.450 に答える