問題タブ [authorize-attribute]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - ASP.NET MVC:C#でReflectionを使用して[Authorize]属性を持つコントローラーを見つける方法は?(またはDynamic Site.Masterメニューを作成する方法は?)
タイトルの質問に飛び込む前に、バックアップして範囲を広げる必要があるかもしれません...
現在、ASP.NET MVC 1.0でWebアプリを作成しています(ただし、PCにはMVC 2.0がインストールされているため、1.0に厳密に制限されているわけではありません)-標準のMVCプロジェクトから始めました。基本的な「ASP.NETMVCへようこそ」で、右上隅に[ホーム]タブと[バージョン情報]タブの両方が表示されます。かなり標準的ですよね?
4つの新しいコントローラークラスを追加しました。それらを「天文学者」、「生物学者」、「化学者」、「物理学者」と呼びましょう。新しい各コントローラークラスには、[Authorize]属性が付加されています。
たとえば、BioologistController.csの場合
これらの[承認]タグは、役割に応じて異なるコントローラーにアクセスできるユーザーを自然に制限しますが、ユーザーが属している役割に基づいて、Site.MasterページのWebサイトの上部にメニューを動的に作成したいと思います。したがって、たとえば、「JoeUser」がロール「Astronomer」および「Physicist」のメンバーである場合、ナビゲーションメニューには次のように表示されます。
[ホーム][天文学者][物理学者][概要]
そして当然、「生物学者」または「化学者」コントローラーのインデックスページへのリンクはリストされません。
または、「JohnAdmin」がロール「Admin」のメンバーである場合、4つのコントローラーすべてへのリンクがナビゲーションバーに表示されます。
わかりました、あなたはその考えを大いに理解します...今本当の質問のために...
ASP.NETでの動的メニューの構築に関するこのStackOverflowトピックからの回答から始めて、これを完全に実装する方法を理解しようとしています。(私は初心者で、もう少しガイダンスが必要なので、私と一緒に裸にしてください。)
答えは、Controllerクラス(「ExtController」と呼びます)を拡張してから、新しいWhateverControllerをExtControllerから継承することを提案しています。
私の結論は、このExtControllerコンストラクターでReflectionを使用して、ロールを決定するために[Authorize]属性が付加されているクラスとメソッドを決定する必要があるということです。次に、静的ディクショナリを使用して、ロールとコントローラ/メソッドをキーと値のペアで保存します。
私はそれを次のように想像します:
これは実行可能ですか?その場合、ExtControllerコンストラクターでReflectionを実行して、[Authorize]属性と関連するロール(存在する場合)を検出するにはどうすればよいですか。
また!この質問の範囲を超えて、この「役割に基づく動的Site.Masterメニュー」の問題を解決する別の方法を提案してください。私はこれが最善のアプローチではないかもしれないことを認める最初の人です。
編集
たくさん読んで実験した後、私は自分自身の解決策を思いつきました。私の答えは以下を参照してください。建設的なフィードバック/批評は大歓迎です!
linq - LINQ とリフレクションの使用: アセンブリで [Authorize] 属性を持つすべてのクラスを照会する方法は?
現在、リフレクションとLINQを使用して、アセンブリ内のどの「コントローラー」クラスに[Authorize]属性が関連付けられているかを特定しようとしています。
このコードはほとんど機能します。
LINQ ステートメントを段階的にトレースすると、LINQ ステートメントで定義した「attribs」範囲変数を「マウスオーバー」すると、単一の属性が取り込まれ、その属性がたまたま AuthorizeAttribute 型であることがわかります。 . 次のようになります。
明らかに、LINQ ステートメントの次の行は間違っています。
「attribs」に AuthorizeAttribute タイプが含まれているかどうかを検出するには、代わりに何を書く必要がありますか?
c# - 現在のユーザーが [Authorize] で必要なロールに属していない場合、自動的にリダイレクトできますか?
私が構築しているASP.NET MVCサイトには、それらを使用するユーザーが特定の役割を果たさなければならないいくつかの方法があります(たまたま、そうでない場合は、サイトから停止されていることを意味します) . これを達成するために、[Authorize(Roles="RoleName")]
問題なく属性を使用しています。
[Authorize]
しかし、そのチェックに合格しなかったユーザーがどうなるかはよくわかりません。彼らは何を示していますか?
一時停止中のユーザーがこれらのメソッドを使用しようとした場合、別のアクションにリダイレクトしたいと考えています。今のところ、[Authorize]
(ロールを指定せずに) 空白の属性を使用してから、ユーザーがロールの一部であるかどうかをアクション コードでチェックしています。
私のアプローチはコードの匂いのように感じます。ユーザーがチェックに合格しなかった場合に、ユーザーに何を表示するか (またはどこにリダイレクトするか) を指定することはできます[Authorize]
か?
.net - 承認フィルターとアクション フィルター
アプリケーションに .NET mvc2 を使用しています。自分のアクションに対してカスタム承認が必要です。少しググってみましたが、2つのオプションが利用できるようです。
- カスタム アクション フィルターの onActionExecuting にロジックを実装します。この投稿を参照してください。
- authorizeattribute をサブクラス化するか、Iauthorization インターフェイスを実装して、そこにロジックを配置します。
ここでの私の質問は、各手法を使用することの長所と短所を考慮して、どの手法が好ましいかということです
編集: さらに、ベース コントローラーで onActionExecuting と onAuthorization をオーバーライドできるため、コントローラー変数に直接アクセスできるというメリットがあります。
security - ActionFilterAttribute/AuthorizeAttribute を使用してコンテンツを非表示/表示する
Futures で MVC 2 を使用しており、役割に基づいてコンテンツを非表示/表示しようとしています。認証がすべての属性を通じてコントローラーの子アクションを表示しない場合、ActionFilterAttribute または AuthorizeAttribute を使用する方法はありますか? それとも、これらの属性でできることは、リダイレクトまたはエラー メッセージを表示することだけですか? 認証に失敗した場合、基本的に何も返さない子アクションが必要です。
asp.net-mvc - ASP.NET MVC で現在のアクション/コントローラーのカスタム属性のリストを取得する
ASP.NET MVC2 用に記述されたhttp://lukesampson.com/post/471548689/entering-and-exiting-https-with-asp-net-mvcのサンプル コードを調べたところ、カスタム属性がfilterContext.ActionDescriptor
およびfilterContext.ActionDescriptor.ControllerDescriptor
それぞれにアクセスすることにより、現在のアクションまたはコントローラーに適用されます。
カスタム属性のアクションとコントローラーをチェックする ASP.NET MVC 1 メソッドは何ですか? ASP.NET MVC 1 ではfilterContext.ActionDescriptor
、私が言えることはありません。
asp.net-mvc - ASP.NET MVC Beta Authorize 属性により、間違ったアクションが表示される
今日、私は MVC 3 Beta で遊び始めました。デフォルトの MVC 3 テンプレートからのアプリケーションで開始し、次のようにホーム コントローラーに新しいアクションを追加しました (ビュー付き)。
Secured アクションに移動しようとすると、404 ページが見つからないというエラーが表示されます。
これが私のweb.configの認証セクションです。
私がそれを正しく理解していれば、Authorize 属性によって 401 無許可の HTTP 応答が返され、認証ハンドラーによってインターセプトされ、loginUrl にリダイレクトされるはずです。これにより、アカウント/ログオン アクションが発生します。
私の MVC 2 アプリケーションは期待どおりに動作し、アカウント/ログオン アクションに移動します。またはこれは MVC 3 ベータ版のバグですか?
jquery - 部分ビューを返すコントローラー アクションは、承認が失敗したときにログオン ページを挿入します。
jQuery を使用してコントローラー アクションから部分ビューを読み込むビューがあります。コントローラー アクションは Authorize 属性で装飾されており、適切なログオン ページにリダイレクトされる代わりにそのアクションが呼び出されたときにユーザーがタイムアウトした場合、部分ビューが移動したビューにログオン ページが挿入されます。
jQuery を使用したソリューションを説明する別の投稿がここにありますが、残念ながら、私が必要とするコード サンプルは含まれていません。なぜなら、私は jQuery にあまり詳しくない (そして Web 開発に慣れていない) ため、この問題を解決する必要があるからです。できるだけ早く。
私がやりたいことは、ユーザーを適切なログオン ページにリダイレクトすることだけです。jQuery を使用する方法がある場合は、誰かがコード サンプルを投稿していただけないでしょうか。
ありがとう。
.net - .net の標準 Web フォーム (MVC ではない) に相当する authorizeattribute はありますか
Windows ロール プロバイダーを使用するプロジェクトに取り組んでおり、機能を特定の AD グループに制限したいと考えています。
MVC を使用すると、AuthorizeAttribute
上記のアクション メソッドを使用して、それに応じてリダイレクトできます。MVC を使用しない標準の Web フォーム アプリケーション (.NET 3.5) に対して同様のことができますか?
c# - AuthorizeAttribute をリダイレクトではなくステータス コード 403 Forbidden で応答させる方法はありますか?
ユーザーがログインしておらず、 とマークされたアクションを要求した[Authorize]
場合、応答は Account/LogOn アクション (ステータス コード 302 Found) へのリダイレクトです。
代わりに、応答をステータス コード 403 Forbidden にする方法はありますか?