2012-04-07 16 views
0

私のフォーム認証にロールを使用しようとしています.Global.asax Application_AuthenticateRequestメソッドを使用して、クッキーからロールを取得しても問題ありません。しかし、Web.Configでどのプロバイダを設定するのか分かりません。私は、単にクッキー、SQLサーバーを使用したくない。CookieとSQLを使用しないASP.NET MVC3ロール認証?

この行はIPrincipalを作成します(ロールはロールを持つ文字列配列である)

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

最終目標は、[承認(ロール=「管理」)]のようなDataAnnotationsとIsInRoleメソッドの作業を取得することです。

また、IsInRoleメソッドは、global.asaxで使用されていても別の場所では正常に動作します。何故なの?

Web.configファイルは、今のように構成されています

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

とDefaultProviderは悲しいことがない本当の理由は、いくつかの空のSQL DBに接続されています。

これも可能ですか?

ありがとうございました。

+0

ここで第二の答えからコードを使用してクッキーの役割を取得する:http://stackoverflow.com/questions/1385042/asp-net-mvc-forms-authentication-authorize-attribute-simple-roles – Michael

+0

ビジュアルスタジオのバグ、または何かが原因で問題が発生しました。私が上で述べたポストのコードは、Webアプリケーションに何も問題がないときと同じように動作します。 – Michael

答えて

0

より良い方法はASP.NET XmlProvidersです。

SQLサービスインスタンスを使用したくない場合や、データベースの種類を使用する利点がある場合は、ErikJ's Sql CE MembershipProvider/RoleProvidersを使用してください。 (ブログでは、CE 4.0は生産準備が整っていないが、これはずっと前のことであり、現在は小規模な生産環境でも使用できると述べている)。あなたがあなた自身の役割AuthroizeAttributeと派生AUTHORIZE属性クラスにOnAuthorize上書き確かに可能性

UPDATE

+0

これらはどちらも私にとっては残酷な感じですね。私は、プリンシパルで既にロールを使用しようとしています。既にASP.NETには単純なソリューションがありますか? – Michael

+0

役割を割り当てられたユーザー/メンバーシップがない場合、どのユーザーがどの役割を果たしているかをどのように知ることができますか?私はうまくいくホイールを作り直すファンではない。私は個人的に問題のない小さなウェブサイトでCEバージョンを使用し、プロバイダの全面的な利益を得ています(実際のクライアントのニーズに合わせて多くの作業を行います)。 –

+0

あなたのアップデートは進まないかもしれませんが、どうすればいいのか分かりません。また、global.asax内でメソッドIsInRoleを使用すると、動作します!他の場所で使用されているときはそうではありません。何が間違っていますか? – Michael

0

あなたが言ったことに基づいてあなた自身のプロバイダは必要ありません。ですから、単にauthenticaterequestを読み込み、設定することができます。

ここで問題はどこに保存したいのですか?どのようにそれらを保存したいですか?あなたはクッキーでそれらを設定しますか?確かにクッキーがなくなったときに保持したいと思っているいくつかの永続的なストアがあります。どのように役割をリフレッシュしますか?

+0

クッキーの有効期限が切れた場合、私は店を必要としません。ユーザーが再びログインすると、役割データを持つ新しいCookieが取得されます。 authenticaterequestで何ができますか? – Michael

+0

あなたの役割はどこに保存されていますか? –

+0

ユーザーのCookieを作成すると、そのCookieにその役割があり、Application_AuthenticateRequestがそのCookieを取得します。私はこの記事の2番目の答えのコードを使用します:http://stackoverflow.com/questions/1385042/asp-net-mvc-forms-authentication-authorize-attribute-simple-roles – Michael

0

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

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

これはすでに私がやっていることです。それが私のweb.configの外観です。しかし、それは動作しません:( – Michael

+0

@マイケル - そしてそれは動作しないことを知っていますか? –

+0

私はIsInRoleメソッドのために '偽'を取得しているので、ロールで許可するDataAnnotationsも機能しません。 – Michael

関連する問題