Sdílet prostřednictvím


WebPartManager.OnAuthorizeWebPart(WebPartAuthorizationEventArgs) Metoda

Definice

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

e
WebPartAuthorizationEventArgs

A WebPartAuthorizationEventArgs , který obsahuje data události.

Příklady

Následující příklad kódu ukazuje, jak nastavit vlastní obslužnou rutinu AuthorizeWebPart události pro událost, aby obslužná rutina mohla poskytnout vlastní filtrovací kód 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é mají být přidány na stránku.

Na webové stránce si všimněte, že <asp:webpartmanager> element má OnAuthorizeWebPart atribut s přiřazeným názvem obslužné rutiny události. Metoda zkontroluje, jestli ovládací prvky na stránce mají nastavené admin odpovídající AuthorizationFilter hodnoty vlastností, a pokud ano, vrátí hodnotu true, což znamená, že budou autorizovány a přidány na stránku.

Poznámka

Všimněte si, že ovládací prvky, které nemají přiřazenou AuthorizationFilter žádnou hodnotu vlastnosti, jsou přidány také, protože se předpokládá, že nejsou součástí scénáře filtrování. Ve scénáři filtrování by to byl běžný přístup: některé ovládací prvky by se filtrovaly a jiné ne, protože se předpokládá, že jsou 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ů ale bude pravděpodobně jedním z nejběžnějších použití této funkce filtrování. Pokud máte na svém webu role a chcete v této metodě zkontrolovat role uživatelů 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 metodou IsAuthorizedWebPart , když se kontroluje, zda se má na stránku přidat autorizace ovládacího prvku. OnAuthorizeWebPart Při volání metody vyvolá AuthorizeWebPart událost, a pokud existuje metoda obslužné rutiny události, 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 ovládacím WebPartManager prvku, prochází procesem autorizace, aby se zjistilo, zda lze ovládací prvek přidat. Ve výchozím nastavení sada ovládacích prvků webové části neposkytuje žádná kritéria filtrování, která by zabránila přidání ovládacích prvků do zóny. Sada ovládacích prvků ale vývojářům poskytuje mechanismy potřebné k vytvoření vlastních kritérií filtrování. Pomocí těchto mechanismů můžete vytvářet vlastní scénáře filtrování. Můžete například vytvořit filtr, který zajistí, že pokud má uživatel roli správce, určité ovládací prvky se při vykreslení stránky přidají do zóny a pokud je uživatel v roli uživatele, tyto ovládací prvky se nepřidají.

Mechanismy pro filtrování ovládacích prvků během procesu autorizace jsou AuthorizationFilter vlastnost ovládacích WebPart prvků, IsAuthorized metody a OnAuthorizeWebPart a AuthorizeWebPart událost na ovládacím WebPartManager 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ého chcete filtrovat. Pokud například chcete, aby byl daný ovládací prvek přidán do zóny pouze v případě, že si stránku prohlíží uživatel s oprávněním správce, můžete vlastnosti přiřadit řetězcovou hodnotu admin . Pak můžete použít funkci ASP.NET role 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á, filtrovací kód zkontroluje, v jaké roli se uživatel nachází, porovná ji s hodnotou autorizačního filtru u kontrolovaného ovládacího prvku. Pokud má uživatel například roli správce a vy jste nastavili hodnotu ovládacího prvku AuthorizationFilter na admin, je možné ovládací prvek přidat.

Druhým krokem při vytváření scénáře filtrování je napsání kódu, který zkontroluje AuthorizationFilter hodnoty WebPart vlastností ovládacích prvků a určí, jestli je každý ovládací prvek před jeho přidáním do jeho zóny autorizovaný. Existují dvě možnosti, kam tento filtrovací kód umístit. První možnost je upřednostňovanou možností pro vývojáře stránek. Můžete vytvořit metodu pro zpracování AuthorizeWebPart 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 atributu OnAuthorizeWebPart do značky WebPartManager ovládacího prvku na stránce, jak je znázorněno v následujícím ukázkovém kódu značky.

<asp:webpartmanager id="manager1" runat="server"   
   OnAuthorizeWebPart="manager1_AuthorizeWebPart" />  

Vše, co vlastní metoda musí udělat, je zkontrolovat každý WebPart ovládací prvek pro kritéria filtrování a pak na základě výsledků přiřadit logickou hodnotu vlastnosti IsAuthorized objektu WebPartAuthorizationEventArgs , která označuje, zda WebPart lze ovládací prvek přidat. Kód v části Příklad ukazuje, jak to udělat.

Druhou možností, kam umístit filtrovací kód, je dědit z WebPartManager třídy a přepsat metodu pro kontrolu kritérií filtru. Dvě metody, které můžete přepsat, jsou WebPartManager.IsAuthorized(Type, String, String, Boolean) metoda nebo OnAuthorizeWebPart metoda . I když by obě metody fungovaly, ve většině případů je vhodnější metodu IsAuthorized přepsat, 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 je vyvolání události a kontrola obslužné rutiny. Příklad kódu vlastní WebPartManager třídy, která přepisuje metodu IsAuthorized , najdete v WebPartManager.IsAuthorized(Type, String, String, Boolean) přetížení metody .

Platí pro

Viz také