2013-10-11 165 views
0

如何防止用戶訪問certail url(例如/ Edit/4)? ID 4不屬於他,所以我想顯示未經授權的頁面。限制訪問某些路由值

我在數據庫中有一個userId字段我可以檢查url中的id是否可以顯示。

我試過了一個自定義authorizeattribute,但我不知道如何訪問發送給actionresult的參數。

public class EditOwnAttribute : AuthorizeAttribute 
{ 
    // Custom property 
    public string Level { get; set; } 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     var isAuthorized = base.AuthorizeCore(httpContext); 
     if (!isAuthorized) 
     { 
      return false; 
     } 




     return false; 
    } 
+0

張貼代碼或您也許我們可以幫你! –

+0

您如何知道您示例中的ID 4不屬於用戶?你有一個表或它的代碼?你的意思是說用戶只能編輯他的帖子? –

+0

因爲你知道id 4不屬於他,這意味着你有它在數據庫中的某個地方。在編輯操作中,爲什麼不檢查id和userid,如果某個id不屬於某個用戶,請將其發送到錯誤頁面......這不會是最簡單的soln。 – kandroid

回答

1

我用限制與自定義授權訪問過濾器像下面

[FeatureAuthentication(AllowFeature="OverView")] 
    public ActionResult Index() 
    { 
    } 

然後

public class FeatureAuthenticationAttribute : FilterAttribute, IAuthorizationFilter 
{ 
    public FeatureConst AllowFeature { get; set; } 

    public void OnAuthorization(AuthorizationContext filterContext) 
    { 
     //var featureConst = (FeatureConst)filterContext.RouteData.Values["AllowFeature"]; 

     var filterAttribute = filterContext.ActionDescriptor.GetFilterAttributes(true) 
           .Where(a => a.GetType() == typeof(FeatureAuthenticationAttribute)); 
     if (filterAttribute != null) 
     { 
      foreach (FeatureAuthenticationAttribute attr in filterAttribute) 
      { 
       AllowFeature = attr.AllowFeature; 
      } 

      User currentLoggedInUser = (User)filterContext.HttpContext.Session["CurrentUser"]; 
      bool allowed = ACLAccessHelper.IsAccessible(AllowFeature.ToString(), currentLoggedInUser); 
      // do your logic... 
      if (!allowed) 
      { 
       string unAuthorizedUrl = new UrlHelper(filterContext.RequestContext).RouteUrl(new { controller = "home", action = "UnAuthorized" }); 
       filterContext.HttpContext.Response.Redirect(unAuthorizedUrl); 
      } 
     } 
    } 
}