WebPartManager.OnAuthorizeWebPart(WebPartAuthorizationEventArgs) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
AuthorizeWebPart Vyvolá událost a vyvolá obslužnou rutinu události, pokud existuje.
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)
Parametry
A WebPartAuthorizationEventArgs obsahující data událostí.
Příklady
Následující příklad kódu ukazuje, jak nastavit vlastní obslužnou rutinu události pro AuthorizeWebPart událost, aby obslužná rutina mohla poskytnout vlastní kód filtrování pro metodu OnAuthorizeWebPart . Tento příklad by byl typickým způsobem, jak vývojář stránky poskytnout scénář filtrování a autorizaci ovládacích WebPart prvků, které se mají přidat na stránku.
Na webové stránce si všimněte, že <asp:webpartmanager> element má OnAuthorizeWebPart atribut s názvem obslužné rutiny události přiřazené k němu. Metoda zkontroluje, zda ovládací prvky na stránce mají nastavené odpovídající AuthorizationFilter hodnoty admin vlastností a pokud ano, vrátí true, což znamená, že budou autorizované a přidané na stránku.
Poznámka:
Všimněte si, že ovládací prvky, které nemají přiřazenou žádnou hodnotu k AuthorizationFilter vlastnosti, jsou přidány také, protože se předpokládá, že nejsou součástí scénáře filtrování. To by byl běžný přístup ve scénáři filtrování: některé ovládací prvky by se filtrovaly a jiné by nebyly, protože se předpokládá, že budou dostupné pro všechny uživatele.
<%@ 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>
Vzhledem k tomu, že nastavení uživatelů v rolích je nad rámec tohoto tématu, tento příklad kódu nekontroluje role uživatelů ve filtrování. Scénář filtrování ovládacích prvků podle rolí uživatelů je ale pravděpodobně jedním z nejběžnějších použití této funkce filtrování. Pokud máte na webu role a chcete zkontrolovat role uživatelů v této metodě pro filtrování ovládacích prvků, bude metoda vypadat podobně jako následující blok kódu (oproti jednoduššímu přístupu v předchozím příkladu kódu, který nepoužívá role).
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;
}
}
Poznámky
Metoda OnAuthorizeWebPart je volána IsAuthorized metodou, když WebPart ovládací prvek kontroluje autorizaci, která se má přidat na stránku. OnAuthorizeWebPart Když je volána metoda, AuthorizeWebPart vyvolá událost a pokud existuje metoda obslužné rutiny pro událost, vyvolá obslužnou rutinu.
Proces autorizace WebPart ovládacích prvků je důležitou funkcí webových částí. Každý WebPart nebo serverový ovládací prvek, který je přidán do zóny WebPartManager ovládací prvek, prochází procesem autorizace, aby bylo možné určit, zda lze ovládací prvek přidat. Ve výchozím nastavení sada ovládacích částí webových částí neposkytuje žádná kritéria filtrování, která brání přidání ovládacích prvků do zóny. Sada ovládacích prvků ale poskytuje mechanismy potřebné pro vývojáře k vytvoření vlastních kritérií filtrování. Pomocí těchto mechanismů můžete vytvořit vlastní scénáře filtrování. Můžete například vytvořit filtr, aby v případě, že je uživatel v roli správce, byly některé ovládací prvky přidány do zóny při vykreslení stránky a pokud je uživatel v roli uživatele, tyto ovládací prvky se nepřidají.
Mechanismy filtrování ovládacích prvků během procesu autorizace jsou AuthorizationFilter vlastností ovládacích WebPart prvků, metod AuthorizeWebPartIsAuthorized a OnAuthorizeWebPart událostí WebPartManager ovládacího prvku.
Pokud chcete vytvořit scénář filtrování, existují v podstatě dva úkoly. Nejprve přiřadíte řetězce vlastnosti AuthorizationFilter každého WebPart ovládacího prvku, který chcete filtrovat. Tyto řetězcové hodnoty můžou být libovolné, ale měly by obsahovat kritéria, podle které chcete filtrovat. Pokud byste například chtěli, aby byl daný ovládací prvek přidán do zóny pouze v případě, že uživatel správce stránku zobrazuje, můžete vlastnost přiřadit řetězcovou hodnotu admin . Pak můžete použít funkci ASP.NET rolí a přidat všechny uživatele webu do různých rolí, jako je správce, správce a uživatel. Když se stránka načítá, váš kód filtrování zkontroluje, ve které roli uživatel je, porovná ji s hodnotou autorizačního filtru u ovládacího prvku, který je kontrolován, a pokud (například) je uživatel v roli správce a vy jste nastavili hodnotu adminovládacího prvku AuthorizationFilter na , může se ovládací prvek přidat.
Druhým krokem při vytváření scénáře filtrování je napsání kódu pro kontrolu AuthorizationFilter hodnot vlastností u WebPart ovládacích prvků a určení, jestli je každý ovládací prvek autorizovaný před jeho přidáním do zóny. Existují dvě možnosti, kde umístit tento kód filtrování. První možností je upřednostňovaná možnost pro vývojáře stránek. Můžete vytvořit metodu AuthorizeWebPart pro zpracování události přímo v kódu skriptu serveru webové stránky nebo v souboru oddělení kódu. Přidružte metodu k události přidáním OnAuthorizeWebPart atributu ke značce WebPartManager ovládacího prvku na stránce, jak je znázorněno v následujícím vzorovém kódu značky.
<asp:webpartmanager id="manager1" runat="server"
OnAuthorizeWebPart="manager1_AuthorizeWebPart" />
Veškerá vlastní metoda musí provést kontrolu jednotlivých WebPart ovládacích prvků pro kritéria filtrování a pak na základě výsledků přiřadit logickou hodnotu vlastnosti IsAuthorized objektu WebPartAuthorizationEventArgs , která určuje, zda WebPart lze ovládací prvek přidat. Kód v části Příklad ukazuje, jak to udělat.
Druhou možností, kde umístit kód filtrování, je dědit z WebPartManager třídy a přepsat metodu pro kontrolu kritérií filtru. Dvě metody, které můžete přepsat, jsou metoda WebPartManager.IsAuthorized(Type, String, String, Boolean) nebo OnAuthorizeWebPart metoda. I když by jedna metoda fungovala, ve většině případů je vhodnější přepsat metodu IsAuthorized , protože poskytuje větší programovou kontrolu nad celým procesem autorizace, zatímco OnAuthorizeWebPart metoda provádí pouze jeden konkrétní úkol, který má vyvolat událost a zkontrolovat obslužnou rutinu. Příklad kódu vlastní WebPartManager třídy, která přepíše metodu IsAuthorized , viz WebPartManager.IsAuthorized(Type, String, String, Boolean) přetížení metody.