Security Trimming mit ASP.NET MVC
Mittwoch, 14. Oktober 2009Einer der grossen Pluspunkte des ASP.NET MVC Frameworks ist, dass viel von der bestehenden ASP.NET Infrastruktur weiterverwendet werden kann. In einigen wenigen Fällen lassen sich auch die WebForm Server Controls sinnvoll einsetzen. Dies ist möglich, solange die Standard WebFormViewEngine verwendet wird.
Ein sehr praktisches Feature der klassischen Webforms ist das Security Trimming, also das Anzeigen von rollenbasierten Inhalten. Je nach Rolle, welche der eingeloggte Benutzer zugewiesen hat, werden ihm nur für diese Rolle passende Inhalte angezeigt. Das ganze Membership System der Webforms wird vom MVC Framework unterstützt. Auch das LoginView Control lässt sich im MVC Framework verwenden, da es keinen ViewState benötigt:
<asp:LoginView ID="LoginView1" runat="server">
<AnonymousTemplate>I can be seen when the user is Anonymous.</AnonymousTemplate>
<LoggedInTemplate>I can only be seen when a user without group membership is logged in.</LoggedInTemplate>
<RoleGroups>
<asp:RoleGroup Roles="Admin,User">
<ContentTemplate>Only users with the "Admin" and "User" role can see this.</ContentTemplate>
</asp:RoleGroup>
<asp:RoleGroup Roles="Admin">
<ContentTemplate>Only users with the "Admin" role can see this.</ContentTemplate>
</asp:RoleGroup>
<asp:RoleGroup Roles="User">
<ContentTemplate>Only users with the "User" role can see this.</ContentTemplate>
</asp:RoleGroup>
</RoleGroups>
</asp:LoginView>
Zu beachten ist, dass die RoleGroups Templates der Reihe nach ausgewertet werden. Nur das erste zu einer Benutzerrolle passende Template wird angezeigt, die anderen nicht. Wenn sich also im Beispielprojekt ein Benutzer mit einer “User” Rolle einloggt, wird er nur das erste RoleGroup Template sehen.
Das LoggedInTemplate wird nur dann angezeigt, wenn kein RoleGroup Template zur Benutzerrolle passt.
Ich habe ein Beispielprojekt zusammengestellt, welches das LoginView Control im Einsatz zeigt. Das Projekt verwendet eine SQLite Datenbank und die SQLite Membership Provider von Roger Martin.
Download des Beispielprojekts: SecurityTrimming.zip
