コントローラから別のURLが承認されているかどうかを確認したいのですが、ASP.Net MVC:URLが承認されているかどうかの確認
したがって、たとえば、私はそうのようなコントローラを呼び出すしたいと思います:
[HttpPost]
public ActionResult IsUrlAuthorized(string url)
{
bool isAuthorized = // What do I put here?
return Json(isAuthorized);
}
だから、私は、現在のユーザが通過を許可されているかどうかをチェックするために呼び出すことができるもの知りたいですURL内にあるかどうか。私は答えは、MVCの外に少し座って、ルートとは何かを持っていると思いますか?ユーザーは、または一般的に認可してもしなくてもよいが、特定のURLを参照して、右の権限や役割の割り当てを持っていない可能性がありますので ASP.NET MVC. Check if user is authorized from JavaScript
:
これはやや似質問ではなく、まったく同じものです。
アイデア?
アップデート:私は標準のMVC認証属性を使用してアプリケーションをロックするので、ここではそのようなものの例を挙げます。 MVCルートでコントローラにマップします。コントローラ上の単一のメソッドは、1つまたは複数のロールに制限することができます。
public class HomeController : Controller
{
[Authorize(Roles = "User, Moderator")]
public ActionResult ListRecentPosts()
{
. . .
}
}
あるいは、全体のコントローラは、1つ以上のロールに制限することができます。
[Authorize(Roles = "Admin")]
public class AdminController : Controller
. . .
これらの任意の実際のURLあなたのユーザーにいいことと、より多くのルートを追加することによって、URLを推測することができ、
routes.MapRoute("Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
しかし - AR通り:コントローラのメソッドは、標準のMVCアプリでデフォルトのマッピングに基づいているために応答しますコントローラメソッドはそれを指す多くの名前を持つことができます。コントローラの名前をURLから推測して推測することはできません(サイトのURLの半分に対応する方法であっても)。
おそらく私は、URLが現在のユーザのために認可されているかどうかを直接ルーティングエンジンに尋ねる方法を必要とするか、コントローラと方法のどちらのルーティングエンジンに質問してから、うまくいけばReflectionとMatching Rolesを直接使用することではありません。
更新2:これは私のアプリの一番上にアカウントストリップがあります。その状態は、あなたが認可しているいくつかのアカウントの1つを選択することによって変更できます。アプリのどこにあるかによって、選択したアカウントにこのページを表示する権限が与えられていて、失うことのないフォームに記入している可能性があります。つまり、別のアカウントを選択したときにリフレッシュするという単純なアプローチは有害であり、フォームがなくてもすべてのテキストを読み込んでいるだけでユーザーの時間が無駄になります。
ユーザーは、その利便性は良いですが、ユーザーは、許可を持たないユーザーが実際には拒否されていると見なすことができないページを公平に推測しようとしています(そして、禁止されているページ - それから取られたアクションは失敗します)。だから私は彼らの新しい権限に基づいてリダイレクトするかどうかを知る必要があります。
私が大好きなものの1つは、.NETは多くの優れたライブラリが非常に優れた方法で分解するため、通常の機能や新しい紆余曲折の一部であるものを簡単に再構成できます。ルーティングモジュールとMVCの両方が非常にうまく構築されているようですので、これを行うことができると思わなければなりません。
安いハックは、ユーザーが承認されていないときに一貫性のあるリダイレクトステータスコードを返すことです。また、ユーザーがアカウントストリップで自分のアカウントを変更すると、2つのAJAX呼び出しが発生します。 AJAX上で現在のページに2番目のページを表示して、HTTPステータスコードを確認します。 200 OKはページをそのままにしておくことを意味し、リダイレクトはリダイレクトに従うことを意味します。明らかにこれはちょっと醜いことですが、余分なHTTP呼び出しが含まれ、ログに誤ったヒットが作成され、アプリケーション全体で認証がどのように処理されるかが前提となります。
ページが承認されている可能性がありますが、ページの動作や外観が変更されている可能性があります。この特定のアプリはアカウント(アカウントのストリップ自体に加えて)に基づいて外観に変化はなく、聴取するカスタムイベントを提供するだけで機能変更を処理することができます。
ここで、これらの正しい権限が格納されています – Tassadaque
私は現在私がどのように現在のところ権限を定義しているのかの例を与えるために質問を展開します(標準MVCのものです) –