2012-03-26 7 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を使用していますか? –

+0

私はmvcを使用しています。使用したのは<%@ Page CodeBehind = "Edit.aspx.cs" Title = "" Language = "C#" MasterPageFile = "〜/ Views/Shared/Site.Master" Inherits = "Views.Selection.Edit" %> 私にエラーがありません –

答えて

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

コントローラにこのオーバーライドを追加しますか? –

+0

(フォーマットが少し修正されました)。いいえ、オーバーライドはあなたのコントローラーにはありません。これはカスタム属性の一部です。その後、属性はコントローラーまたは制限するコントローラー・アクションに進みます。 – Leniency

+0

フレームワークのソースにアクセスできません。これは、Webサービス –

関連する問題