2012-03-26 2 views
0

Ich versuche, Steuerelemente basierend auf Benutzerberechtigungen mithilfe eines benutzerdefinierten Sicherheitsframeworks zu deaktivieren/aktivieren. Ich versuche, diesen Code in der Codebehind-Datei zu verwendenMVC3-Zugriffssteuerung

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; 
       } 
      } 
     } 

Die IsReadOnly Eigenschaft der Steuerung ist jedoch nicht verfügbar. Gibt es eine Möglichkeit, dies zu beheben oder einen besseren Weg, dies zu erreichen?

--- --- Aktualisierung

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 nicht über einen Code-Behind . Verwenden Sie MVC oder WebForms? –

+0

ich benutze mvc ich benutze <% @ Seite CodeBehind = "Edit.aspx.cs" Title = "" Language = "C#" MasterPageFile = "~/Ansichten/Shared/Site.Master" Inherits = "Views.Selection.Edit" %> hat mir keine Fehler –

Antwort

4

Sie sollten nicht mit Code-Behind ASP.Net MVC verwenden - es geht gegen die Prinzipien von MVC. Eine Ansicht sollte nicht die Entscheidung sein, ob ein Benutzer Berechtigungen hat oder nicht. Die Entscheidung, ob eine Seite sichtbar ist, gehört zur Controller-Ebene.

Ein besserer Weg zur Handhabung von Berechtigungen ist die Verwendung des [Authorize] Attributs auf Ihren Controllern. Dh,

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

Sie können Ihr eigenes Authorize Attribut binden in Ihre benutzerdefinierten Rahmen schreiben:

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

es dann auf dem Controller-Aktion verwenden:

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

Ich würde diese Überschreibung der Steuerung hinzufügen? –

+0

(ein wenig Formatierung behoben). Nein, die Überschreibung wird nicht in Ihren Controller übernommen - das ist Teil des benutzerdefinierten Attributs. Das Attribut geht dann auf den Controller oder die Controller-Aktion, die Sie einschränken möchten. – Leniency

+0

Ich kann nicht auf die Quelle für das Framework zugreifen. Der Zugriff erfolgt über einen Webservice –