2

いくつかの MVC3 機能を既存の WebForms アプリケーションに混在させようとしています。私はいくつかのガイドに従い、認証部分を除いてすべてをセットアップして機能させました。既存のアプリケーションは<deny users="*" />ルートの web.config にあり、各サブフォルダーには、特定のロール内のページへのアクセスを許可する独自の web.config があります。

私の新しい理解は、このスタイルのコントローラーでは使用できない/使用すべきではないということであり、Authorize代わりに属性を使用する必要があります。テスト " HomeController" クラスを[Authorize(Roles="AdminRole")]で装飾しましたが、ページを表示しようとすると「アクセスが拒否されました」というページが表示されます。

ルート web.config を言うように変更すると<allow users="*" />、ページが機能します。これは、コントローラーに追加した属性は機能しているが、ルートの web.config 設定が優先されているということですか? サイトは十分に確立されており、MVC を追加して操作しようとしているだけなので、既存の認証機能を台無しにしたくありません。何か不足していますか?あなたが提供できる洞察に感謝します。

4

1 に答える 1

1

既に Web フォームを使用しているアプリで MVC セキュリティを使用しようとしているので、これは少し注意が必要です。これが純粋な mvc の場合、選択は簡単です。mvc 機能を別のアプリに引き出すことができない場合、これはあなたを少し苦しめます。

私の最初の推奨事項は、コードを抽出することです。安らかな機能のみを提供するために MVC を使用している場合は、MVC4 Web API をチェックして、アプリに API を提供し、それらの間で使用されるコンポーネントを共有します。これには、それらを Web アプリからドメイン ライブラリまたは適切な名前の他のライブラリに引き出す必要があります。図書館。

そうは言っても、 allow users="*" が期待どおりに機能しているかどうかは 100% わかりませんが、私はそう信じています。テストは簡単です。単に Roles="AdminRole" を Roles="placeholder" に変更して、もう一度試してください。

ただし、これを設定すると認証の残りの部分が強制終了されるため、すべての mvc ルートを「/api/」などの特定の URL の下に配置し、web.config で * をそのパスに許可してから、すべてで mvc のセキュリティを使用することをお勧めします。あなたのコントローラーメソッド。これは、メインの Web アプリへの影響はほとんどありません。

于 2012-05-22T15:10:04.917 に答える