2012-04-01 9 views
0

Ich arbeite an einem ASP.NET-Projekt für eine Schule. In einem Bereich möchte ich fast identische Ansichten für Mitarbeiter und Studenten anbieten können - der einzige wirkliche Unterschied sind die Daten, die angezeigt werden.Verwenden von Rollen zum Segmentieren von ViewModels/Controllern/Ansichten

Für einen Benutzer mit einer Schülerrolle sollten sie nur ihre eigenen Daten sehen, während ein Lehrer in der Lage sein sollte, die kombinierten Daten ihrer Klasse zu sehen (plus einen Blick auf einzelne Schülerdaten). Beide Benutzer können zwischen zwei Teilansichten wechseln, die die Daten anders darstellen (Liniendiagramm, Tabelle usw.).

Was ist die beste Vorgehensweise, um dies mithilfe des MVC-Musters zu strukturieren? Im Wesentlichen wird es die gleiche Ansicht für alle von ihnen sein, nur die Informationen, die ich holen werde anders sein. Ich habe hier einige andere Fragen über zwei Controller und eine Ansicht gelesen, aber sie scheinen nicht die gleichen Berechtigungsanforderungen zu haben wie ich.

+0

Sie bitten im Wesentlichen um jemanden, der das Programm für Sie schreibt ... – McGarnagle

+0

Haben Sie überlegt, Display Templates zu verwenden? – jacqijvv

+0

Nein, habe ich nicht, aber ich lese es ein! –

Antwort

2

Sieht aus wie es auf SO bereits asp.net mvc - dynamic controller based on authenticated user eine ziemlich gute Antwort. Auf diese Weise können Sie basierend auf der Authentifizierung verschiedene Controller erstellen. Sie können dies noch einfacher machen, indem Sie die visuelle Darstellung der Daten in verschiedene Teilansichten aufteilen, die im freigegebenen Verzeichnis gespeichert sind, so dass die Ansichten der verschiedenen Controller dieselben Teilansichten zum Hochladen von HTML verwenden können.

+0

Das ist fantastisch, danke –

1

Wenn ich Ihre Frage genau verstehe, möchten Sie eine Ansicht verwenden, aber andere Daten senden. Ich bin mir nicht sicher, ob dies die beste Lösung ist. In Ihrer Situation würde ich zwei verschiedene Controller erstellen, einen für Schüler und einen für Lehrer, aber wenn Sie das verwenden möchten, was Sie vorschlagen, würde ich einen Mitgliedschaftsanbieter von Microsoft verwenden. Hier ist ein Beispiel. hier ist ein Tutorial und einige Beispiel

http://theintegrity.co.uk/2010/11/asp-net-mvc-2-custom-membership-provider-tutorial-part-1/

 public ActionResult Index() 
     { 
      if (User.Identity.IsAuthenticated) 
      { 
       MembershipUser currentUser = Membership.GetUser(User.Identity.Name, true /* userIsOnline */); 

       if (currentUser != null && currentUser.ProviderUserKey != null && currentUser.IsApproved) 
       { 
        var currentUserId = (Guid)currentUser.ProviderUserKey; 

        // get user data maybe somethink like that .... 
        Usser result = (from userdata in b.users 
             where userdata.Id == currentUserId 
             select userdata).FirstOrDefault(); 

        return View(result); 
       } 
      } 

      return View(); 
     } 
+0

Ah das sieht sehr nützlich aus, danke! –

Verwandte Themen