Folgende Methoden wollen wir hier beleuchten:
- Deklarative Einschränkung von Methodenaufrufen
- Verwendung der LoginView
- Verarbeitung von Controls der LoginView im Code
- Abfragen der Rolle im Code
Deklarative Einschränkung von Methodenaufrufen auf Rollenbasis
Mit folgender Syntax kann der Aufruf einer Methode auf bestimmte Rollen beschränkt werden:
[PrincipalPermission(SecurityAction.Demand, Role = „Managers“)]
protected void Page_Load(object sender, EventArgs e)
{
}
Wird nun diese Methode aus einer anderen Rolle aufgerufen, kommt es zu einer SecurityException, die dann im aufrufenden Code entsprechend behandelt werden muss.
Verwendung der LoginView
Die LoginView ist ein WebForums-Control, das ähnlich wie ein Panel eine Gruppe an Controls – abhängig von der Rolle – umschließt.
Es können einfache Texte umschlossen werden, oder mithilfe der Verwendung eines ControlTemplates auch beliebige Designs:
<asp:LoginView ID=“LoginView1″ runat=“server“>
<AnonymousTemplate>
You are anonymous
</AnonymousTemplate>
<LoggedInTemplate>
You are logged in, but not Admin
</LoggedInTemplate>
<RoleGroups>
<asp:RoleGroup Roles=“Admins“>
<ContentTemplate>
<div class=“footer“>
<asp:Literal ID=“VisitorLiteral“ runat=“server“ />
</div>
</ContentTemplate>
</asp:RoleGroup>
</RoleGroups>
</asp:LoginView>
Verarbeitung von Controls der LoginView im Code
Durch die Einbettung der Controls in die LoginView können die Controls nicht mehr direkt per Namen aus dem Code angesprochen werden. Zu diesem Zweck muss hier ein kleiner Workaround eingebaut werden:
- Es werden Membervariablen für alle Controls angelegtprivate Literal VisitorLiteral;
- Die Controls werden in der ControlCollection der LoginView gesucht und den Variablen zugewiesenVisitorLiteral = (Literal)LoginView1.FindControl(„VisitorLiteral“);
- Ist das Ergebnis null, dann hat der aufrufende Besucher nicht die passende Rolle und das Control darf im Code nicht weiter verwendet werden.if (VisitorLiteral != null)
{
VisitorLiteral.Text = „Number of visitors: „ + numVisitors.ToString();
}
Abhängig von der aufrufenden Rolle wird dann die jeweilige Sicht der LoginView angezeigt.
Abfragen der Rolle im Code
Beliebige Code-Teile können sehr einfach durch Abfragen der Rolle des Users rollenbasiert implementiert werden. Diese Methode muss von allen Role Providers implementiert werden und ist somit standardmäßig verfügbar:
if (User.IsInRole(„Admins“))
{
}
Ich habe einen weiteren Post zu diesem Thema geschrieben, nämlich wie unterschiedliche Role- und Membership-Provider gemeinsam eingesetzt werden können. Vielleicht habt ihr ja Lust darauf …
Ist doch cool, oder?
LG,
Sabine.