Windows認証を使用してイントラネットサイトを作成中です。[Authorize]アクションフィルタを使用しているコントローラメソッドのブラウザ認証ログインダイアログを表示しない
おそらく私はこの最良の方法については考えていませんが、認可された個人だけがそれを見ることができるように、認可アクションフィルタがラップされたコントローラメソッドを呼び出して部分的なビューをロードしようとしています。ページの一部。たとえば、ログインした個人が管理者である場合にのみ、ページに管理者ツールをロードしたいとします。
[Authorize(Roles="Admins")]
public ActionResult LoadAdminTools()
{
return PartialView("_AdminToolsPartialView");
}
と管理コントロール(または任意を含む、部分ビュー:コントローラは、コードが含まれます
@Html.Action("LoadAdminTools","ControllerName")
:
だからindex.cshtmlページに私のようなものを持っているかもしれません)は、ログインしたユーザーがAdminsロールの一部であった場合にのみ、のページにレンダリングします。
私が抱えている問題は、ログインしたユーザーに部分ビューを読み込む権限がない場合、ブラウザがユーザーの資格情報を要求するログインダイアログをポップアップすることです。資格情報を入力せずにダイアログを閉じると、結果の一部が表示されます。クールだが、迷惑だ。間違った資格情報を入力すると、401エラーが表示されます。
それが助け場合:IISでは、匿名認証が無効になっで、Windows認証はを有効にしています。 「セキュリティ設定 - ローカルイントラネットゾーン」のインターネットオプションで「現在のユーザー名とパスワードで自動ログオン」が選択されています。
私の質問はです:ブラウザにユーザーにログインするように依頼することなく、[Authorize]アクションフィルタを使用して部分的なビューをロードする(または何かを行う)方法はありますか?現在のログインしている資格情報を取得し、アクションフィルタに準拠しているかどうかをチェックし、そうであれば部分的なビューをロードし、そうでない場合はロードします。もし存在しなければ、私がここで成し遂げたいことを進めるためのよりよい方法がありますか?
UPDATE
美しいです。私が投稿した質問の解決策を読んだのは、Mystere Manさんです。というIntranetAuthorizeAttributeというコントローラーのフォルダ内に新しいクラスが作成されました。CSは、コードで投げた:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class IntranetAuthorizeAttribute : System.Web.Mvc.AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(System.Web.Mvc.AuthorizationContext filterContext)
{
if (filterContext.HttpContext.Request.IsAuthenticated)
{
filterContext.Result = new System.Web.Mvc.HttpStatusCodeResult(403);
}
else
{
base.HandleUnauthorizedRequest(filterContext);
}
}
}
は承認が私の新しいIntranetAuthorizeフィルタでフィルタリング置き換え:
[IntranetAuthorize(Roles="Admins")]
public ActionResult LoadAdminTools()
{
return PartialView("_AdminToolsPartialView");
}
そして今、それはありませんブラウザのログインダイアログとうまくページをロードする - での場合はユーザーの場合は部分図、のない場合は部分ビューの場合許可なくユーザー=)
ありがとうございました!