2017-08-27 117 views
1

我想創建過濾器,過濾器應該檢查角色(而不是asp.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

爲什麼不讓阿賈克斯查詢?

添加到您的條件:

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

這不是安全問題嗎? – Velahs

+1

@Velahs你對,查看我的新答案 – shdr