2012-03-26 98 views
0

我想基於用戶權限使用自定義安全框架禁用/啓用控件。我試圖在代碼隱藏文件中使用此代碼MVC3訪問控制

protected void OnLoadComplete(object sender, EventArgs e) 
     { 
      if ((ViewData[Constants.Permission]).Equals(Security.UserAccess.ReadOnlyAccess)) 
      { 
       foreach (var control in this.Page.Controls ) 
       { 
        control.IsReadOnly = true; 
       } 
      } 
     } 

但是,控件的IsReadOnly屬性不可用。有沒有辦法可以解決這個問題或更好的方法來實現這一目標?

---更新---

Controller.cs

[Proxy.AimsAccessLevel] 
    public ActionResult Edit(int clientId) 
    { 
     ClientId = clientId; 
     //SetClientDetails(); 

     var Selection = new SelectionArgs(clientId, null); 

     if (Selection.SelectionFlag == null || Selection.SelectionFlag == "N") 
      Selection.EffectiveDate = new DateTime(DateTime.Now.Year + 1, 1, 1); 

     return View(Selection); 
    } 

proxy.cs

public class AccessLevel : AuthorizeAttribute 
     { 
      protected override bool AuthorizeCore(HttpContextBase httpContext) 
      { 
       Roles = Constants.AccessLevel.FullEdit + Constants.AccessLevel.ReadOnly.ToString() + 
         Constants.AccessLevel.RestrictedEdit; 
       return base.AuthorizeCore(httpContext); 
      } 
     } 
+2

MVC沒有一個代碼隱藏。你使用MVC還是WebForms? – 2012-03-26 15:01:38

+0

即時通訊使用mvc我使用<%@ Page CodeBehind =「Edit.aspx.cs」Title =「」Language =「C#」MasterPageFile =「〜/ Views/Shared/Site.Master」Inherits =「Views.Selection.Edit」 %> 給了我沒有錯誤 – 2012-03-26 15:08:15

回答

4

你不應該使用代碼隱藏與ASP.Net MVC - 它去違反MVC的原則。視圖不應該是決定用戶是否擁有權限的事情。確定頁面是否可見屬於控制器級別。

處理權限的更好方法是在控制器上使用[Authorize]屬性。即,

public MyController : Controller 
{ 
    [Authorize(Roles = "admin")] // Uses default FormsAuthentication 
    public ActionResult Index() 
    { 
     // ... 
    } 
} 

您可以編寫自己的Authorize屬性綁定到您的自定義框架:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] 
public class MyAuthorizeAttribute : AuthorizeAttribute 
{ 
    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     // ... authorization stuff here ... 
    } 
} 

然後用它在你的控制器動作:

public HomeController : Controller 
{ 
    [MyAuthorize] 
    public ActionResult Index() 
    { 
     // ... 
    } 
} 
+0

我會將這個覆蓋添加到控制器? – 2012-03-26 15:16:22

+0

(修正了一些格式)。不,重寫不在控制器中 - 這是自定義屬性的一部分。該屬性然後發送到控制器上,或者您想要限制的控制器動作。 – Leniency 2012-03-26 15:22:36

+0

我無法訪問該框架的源代碼。它正在通過webservice訪問 – 2012-03-26 15:29:54