質問

現在、[Authorize(Roles = ".....")] を使用して ASP.NET MVC 1 アプリのコントローラー アクションを保護していますが、これは正常に機能します。ただし、特定の検索ビューには、検索リストで選択されたレコードと、ログインしているユーザーのセキュリティ権限に基づいて有効/無効にする必要があるアクションにルーティングするボタンが必要です。

したがって、これらのボタンの状態を判断するために、これらのターゲットコントローラー/アクションとアプリケーションロールを相互参照するDBテーブルにアクセスするクラスが必要だと思います。これは、明らかに、権限を 2 つの場所 (クラス/DB テーブルとコントローラーのアクション) で維持する必要があるため、物事が面倒になります (さらに、アクションへのアクセスを変更したい場合は、 DB テーブル エントリを変更するだけではなく、コードを作成してコンパイルします)。

理想的には、[Authorize] コードでロールを指定する代わりに、ユーザー、コントローラー、アクションに基づいてセキュリティ クラスをクエリし、ブール値の許可またはを返すように [Authorize] 機能を拡張したいと考えています。アクセスを拒否しています。これに関する良い記事はありますか。これがやりたいことであるとは想像できませんが、その方法について何かを見つけるのに苦労しているようです(月曜日の朝の脳かもしれません)。記事を見ながら、これを行うコードを開始しました http://schotime.net/blog/index.php/2009/02/17/custom-authorization-with-aspnet-mvc/ 、問題なく始まっているようですが、httpContextから呼び出し元のコントローラーとアクションの値を取得する「正しい」方法が見つかりません。リクエストURLからそれらを抽出するために少しコードをいじることもできるかもしれませんが、それはそれは私には正しくないようです、そして私はむしろ適切にそれをしたいと思います。

乾杯

MH

役に立ちましたか?

解決

別のフォーラムでこれを見つけたので、誰かが役に立つと思った場合に備えてここに投稿します。これを行う方法は、MVC 1 を使用しているか MVC 2 を使用しているかによって異なることに注意してください。

作成したクラスは実装する必要があります

public void OnAuthorization(AuthorizationContext filterContext)

そして、あなたは使うことができます

string controllerName = filterContext.RouteData.Values["controller"].ToString();

同様に、「controller」を「action」に置き換えます(最初にこれらの値に null が含まれていることを確認してください)。MVC 2 では、これを filterContext.ActionDescriptor.ActionName および .ActionDescriptor.ControllerDescriptor.ControllerName に変更でき、null をチェックする必要がなくなります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top