WebPartManager.OnAuthorizeWebPart(WebPartAuthorizationEventArgs) Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Genererar händelsen AuthorizeWebPart och anropar en hanterare för händelsen, om en sådan finns.
protected:
virtual void OnAuthorizeWebPart(System::Web::UI::WebControls::WebParts::WebPartAuthorizationEventArgs ^ e);
protected virtual void OnAuthorizeWebPart(System.Web.UI.WebControls.WebParts.WebPartAuthorizationEventArgs e);
abstract member OnAuthorizeWebPart : System.Web.UI.WebControls.WebParts.WebPartAuthorizationEventArgs -> unit
override this.OnAuthorizeWebPart : System.Web.UI.WebControls.WebParts.WebPartAuthorizationEventArgs -> unit
Protected Overridable Sub OnAuthorizeWebPart (e As WebPartAuthorizationEventArgs)
Parametrar
En WebPartAuthorizationEventArgs som innehåller händelsedata.
Exempel
I följande kodexempel visas hur du anger en anpassad händelsehanterare för AuthorizeWebPart händelsen, så att hanteraren kan ange anpassad filtreringskod för OnAuthorizeWebPart metoden. Det här exemplet är ett vanligt sätt för en sidutvecklare att tillhandahålla ett filtreringsscenario och auktorisering av WebPart kontroller som ska läggas till på en sida.
På webbsidan ser du att elementet <asp:webpartmanager>OnAuthorizeWebPart har attributet med namnet på den händelsehanterare som tilldelats det. Metoden kontrollerar om kontrollerna på sidan har sina respektive AuthorizationFilter egenskapsvärden inställda på admin och i så fall returnerar true, vilket innebär att de kommer att auktoriseras och läggas till på sidan.
Note
Observera att kontroller som inte har något värde som tilldelats egenskapen också läggs till AuthorizationFilter , eftersom de antas inte vara en del av ett filtreringsscenario. Detta skulle vara en vanlig metod i ett filtreringsscenario: vissa kontroller skulle filtreras och andra skulle inte vara det, eftersom de antas vara tillgängliga för alla användare.
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void mgr1_AuthorizeWebPart(object sender,
WebPartAuthorizationEventArgs e)
{
if (!String.IsNullOrEmpty(e.AuthorizationFilter))
{
if (e.AuthorizationFilter == "user")
e.IsAuthorized = true;
else
e.IsAuthorized = false;
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:WebPartManager ID="mgr1" runat="server"
OnAuthorizeWebPart="mgr1_AuthorizeWebPart" />
<asp:WebPartZone ID="WebPartZone1" runat="server">
<ZoneTemplate>
<asp:BulletedList
ID="BulletedList1"
Runat="server"
DisplayMode="HyperLink"
Title="Favorite Links"
AuthorizationFilter="admin">
<asp:ListItem Value="http://msdn.microsoft.com">
MSDN
</asp:ListItem>
<asp:ListItem Value="http://www.asp.net">
ASP.NET
</asp:ListItem>
<asp:ListItem Value="http://www.msn.com">
MSN
</asp:ListItem>
</asp:BulletedList>
<asp:Label ID="Label1" runat="server"
Text="Hello World"
Title="Filter Test"
AuthorizationFilter="admin" />
<asp:Calendar ID="Calendar1" runat="server"
Title="My Calendar"/>
</ZoneTemplate>
</asp:WebPartZone>
</div>
</form>
</body>
</html>
<%@ Page Language="vb" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Protected Sub mgr1_AuthorizeWebPart(ByVal sender As Object, _
ByVal e As WebPartAuthorizationEventArgs)
If Not String.IsNullOrEmpty(e.AuthorizationFilter) Then
If e.AuthorizationFilter = "user" Then
e.IsAuthorized = True
Else
e.IsAuthorized = False
End If
End If
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:WebPartManager ID="mgr1" runat="server"
OnAuthorizeWebPart="mgr1_AuthorizeWebPart" />
<asp:WebPartZone ID="WebPartZone1" runat="server">
<ZoneTemplate>
<asp:BulletedList
ID="BulletedList1"
Runat="server"
DisplayMode="HyperLink"
Title="Favorite Links"
AuthorizationFilter="admin">
<asp:ListItem Value="http://msdn.microsoft.com">
MSDN
</asp:ListItem>
<asp:ListItem Value="http://www.asp.net">
ASP.NET
</asp:ListItem>
<asp:ListItem Value="http://www.msn.com">
MSN
</asp:ListItem>
</asp:BulletedList>
<asp:Label ID="Label1" runat="server"
Text="Hello World"
Title="Filter Test"
AuthorizationFilter="admin" />
<asp:Calendar ID="Calendar1" runat="server"
Title="My Calendar"/>
</ZoneTemplate>
</asp:WebPartZone>
</div>
</form>
</body>
</html>
Eftersom det inte går att konfigurera användare i roller i det här avsnittet kontrollerar det här kodexemplet inte användarroller i filtreringen. Scenariot med filtreringskontroller enligt användarroller är dock sannolikt en av de vanligaste användningsområdena för den här filtreringsfunktionen. Om du har roller på webbplatsen och vill kontrollera användarroller i den här metoden för att filtrera kontroller, skulle metoden likna följande kodblock (jämfört med den enklare metoden i föregående kodexempel, som inte använder roller).
Protected Sub WebPartManager1_AuthorizeWebPart(ByVal sender _
As Object, ByVal e As WebPartAuthorizationEventArgs)
If String.IsNullOrEmpty(e.AuthorizationFilter) Then
If Roles.IsUserInRole(Page.User.Identity.Name, _
e.AuthorizationFilter) Then
e.IsAuthorized = True
Else
e.IsAuthorized = False
End If
End If
End Sub
protected void mgr1_AuthorizeWebPart(object sender,
WebPartAuthorizationEventArgs e)
{
if (!String.IsNullOrEmpty(e.AuthorizationFilter))
{
if(Roles.IsUserInRole(Page.User.Identity.Name, e.authorizationFilter))
e.IsAuthorized = true;
else
e.IsAuthorized = false;
}
}
Kommentarer
Metoden OnAuthorizeWebPart anropas av IsAuthorized metoden när en WebPart kontroll kontrolleras för att auktorisering ska läggas till på en sida. OnAuthorizeWebPart När metoden anropas genererar den AuthorizeWebPart händelsen, och om det finns en hanteringsmetod för händelsen anropas hanteraren.
Processen för att auktorisera WebPart kontroller är en viktig funktion för webbdelar. Varje WebPart kontroll eller serverkontroll som läggs till i en zon av WebPartManager kontrollen genomgår en auktoriseringsprocess för att avgöra om kontrollen kan läggas till. Som standard tillhandahåller kontrolluppsättningen webbdelar inga filtreringsvillkor för att förhindra att kontroller läggs till i en zon. Men kontrolluppsättningen tillhandahåller de mekanismer som krävs för att utvecklare ska kunna skapa egna filtreringsvillkor. Med hjälp av dessa mekanismer kan du skapa anpassade filtreringsscenarier. Du kan till exempel skapa ett filter så att vissa kontroller läggs till i en zon när sidan återges om en användare har en administratörsroll, och om användaren har en användarroll läggs dessa kontroller inte till.
Mekanismerna för filtrering av kontroller under auktoriseringsprocessen är AuthorizationFilter egenskapen för WebPart kontroller, IsAuthorized metoderna och OnAuthorizeWebPart och AuthorizeWebPart händelsen på WebPartManager kontrollen.
För att skapa ett filtreringsscenario finns det i princip två uppgifter. Först tilldelar du strängar till AuthorizationFilter egenskapen för varje WebPart kontroll som du vill filtrera. Dessa strängvärden kan vara godtyckliga, men de bör innehålla de villkor som du vill filtrera på. Om du till exempel bara vill att en viss kontroll ska läggas till i en zon om en administratörsanvändare visar sidan kan du tilldela egenskapen ett strängvärde admin . Sedan kan du använda funktionen ASP.NET roller och lägga till alla användare av webbplatsen i olika roller, till exempel administratör, chef och användare. När en sida läses in kontrollerar din filtreringskod vilken roll en användare har, jämför den med värdet för auktoriseringsfilter på en kontroll som kontrolleras, och om (till exempel) användaren är i en administratörsroll och du har angett kontrollens AuthorizationFilter värde till kan kontrollen läggas till admin.
Det andra steget när du skapar ett filtreringsscenario är att skriva kod för att kontrollera egenskapsvärdena AuthorizationFilter för WebPart kontroller och avgöra om varje kontroll är auktoriserad innan den läggs till i zonen. Det finns två alternativ för var den här filtreringskoden ska placeras. Det första alternativet är det föredragna alternativet för sidutvecklare. Du kan skapa en metod för att hantera AuthorizeWebPart händelsen direkt i webbsideserverns skriptkod eller i en kodsepareringsfil. Associera din metod med händelsen genom att lägga OnAuthorizeWebPart till attributet i taggen WebPartManager för kontrollen på sidan, enligt följande exempelkod.
<asp:webpartmanager id="manager1" runat="server"
OnAuthorizeWebPart="manager1_AuthorizeWebPart" />
Allt din anpassade metod behöver göra är att kontrollera varje WebPart kontroll för filtreringsvillkoren och sedan, baserat på resultaten, tilldela ett booleskt värde till IsAuthorized egenskapen WebPartAuthorizationEventArgs för objektet för att ange om WebPart kontrollen kan läggas till. Koden i avsnittet Exempel visar hur du gör detta.
Det andra alternativet för var du ska placera filtreringskoden är att ärva från WebPartManager klassen och åsidosätta en metod för att kontrollera filtervillkoren. De två metoder som du kan åsidosätta för att göra detta är WebPartManager.IsAuthorized(Type, String, String, Boolean) metoden eller OnAuthorizeWebPart metoden. Även om någon av metoderna skulle fungera är det i de flesta fall bättre att åsidosätta IsAuthorized metoden, eftersom den ger dig större programmatisk kontroll över hela auktoriseringsprocessen, medan OnAuthorizeWebPart metoden bara gör en specifik uppgift, vilket är att skapa händelsen och söka efter en hanterare. Ett kodexempel på en anpassad WebPartManager klass som åsidosätter IsAuthorized metoden finns i överlagringen WebPartManager.IsAuthorized(Type, String, String, Boolean) av metoden.