2017-08-27 5 views
1

フィルタを作成しようとしていますが、フィルタはロールをチェックすることになっています(.NETのメンバーではなく、アイデンティティですが、自分自身です)。低ロールのレベルのユーザーからは、「AuthController」を参照してください)。MVCフィルタアクションが無限ループにリダイレクトする

私のフィルタ条件では、制限ユーザーをホームページに戻します。

AuthController内でAjaxの上位レベルを削除すると問題が発生します。次に、私の部分的なビューがホームページに表示されます。

これを避けるためのエレガントな方法はありますか?

[HttpPost, ActionName("DeleteRole")] 
    [ValidateAntiForgeryToken] 
    public ActionResult DeleteConfirmed(Guid UserId, Guid RoleId) 
    { 
     CustomProvider CP = new CustomProvider(); 
     CP.DeleteRoleFromUser(UserId, RoleId); 

     return PartialView("RolesDelete", db.Role.Where(p => p.Id == RoleId).SingleOrDefault()); 

    } 

フィルタ:

public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     base.OnActionExecuting(filterContext); 

     if (filterContext.HttpContext.User.Identity.IsAuthenticated && string.IsNullOrEmpty(NameFromExternal)) 
     { 
      NameFromExternal = filterContext.HttpContext.User.Identity.Name; 
     } 
     CustomProvider cp = new CustomProvider(); 
     if (CustomRoleProvider.Instance.IsUserInRole(cp.getADNameFromFullDomainName(NameFromExternal), eRoles.High.ToString())) 
     { 
      filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "controller", "Auth" }, { "action", "Index" } }); 
      filterContext.Result.ExecuteResult(filterContext.Controller.ControllerContext); 
     } 
     else 
     { 
      filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "controller", "Home" }, { "action", "Index" } }); 
      filterContext.Result.ExecuteResult(filterContext.Controller.ControllerContext); 
     } 

    } 
+0

あなたの質問には、どのようなコードが示されていますか?あなたはあなたのフィルタを表示していません –

+0

フィルタが何を書いているのか(条件:高位の役割を続行する、低位の役割はホームページに移動します)、問題は私の行動が部分的なビューを返すことで、これを制限したくありません。 – Velahs

+1

再度、どのフィルタ?あなたはあなたの質問に関連するコードを表示する必要があります。 –

答えて

1

ホーム・ページへの熱いご参照くださいいくつかのコントローラのアクションにunauthrizedユーザーを聞かせて、部分的なように表示される部分ビューセットのリダイレクト文で彼は制限されたページ。

コントローラー:

public ActionResult Redirection(string controller, string view) 
    { 
     ViewBag.TargetCtrl = "Home"; 
     ViewBag.TargetView = "Index"; 
     ViewBag.TargetTitle = "Home Page"; 
     return PartialView("~/Views/Shared/Redirection.cshtml"); 
    } 

ビュー

You ara redirected to @ViewBag.TargetTitle 
<script> 
    window.location.href = '@Url.Action(ViewBag.TargetView, ViewBag.TargetCtrl)'; 
</script> 

今、ユーザーがホーム・ページにリダイレクトし、文句を言わない部分図としてホームページが表示されます。

0

なぜAjaxのクエリを許可しませんか?

あなたの条件にこれを追加します:フィルターで

!filterContext.HttpContext.Request.IsAjaxRequest() 
+1

セキュリティ上の問題ではありませんか? – Velahs

+1

@Velahsあなた、私の新しい答えを確認してください – shdr

関連する問題