Freigeben über


WebPartManager.OnAuthorizeWebPart(WebPartAuthorizationEventArgs) Methode

Definition

Löst das AuthorizeWebPart-Ereignis aus und ruft, falls vorhanden, einen Handler für das Ereignis auf.

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)

Parameter

Beispiele

Im folgenden Codebeispiel wird veranschaulicht, wie ein benutzerdefinierter Ereignishandler für das AuthorizeWebPart Ereignis festgelegt wird, sodass der Handler benutzerdefinierten Filtercode für die OnAuthorizeWebPart -Methode bereitstellen kann. Dieses Beispiel wäre eine typische Möglichkeit für einen Seitenentwickler, ein Filterszenario und die Autorisierung von WebPart Steuerelementen bereitzustellen, die einer Seite hinzugefügt werden sollen.

Beachten Sie auf der Webseite, dass das <asp:webpartmanager> -Element über das OnAuthorizeWebPart Attribut mit dem Namen des Ereignishandlers verfügt, dem der Name zugewiesen ist. Die -Methode überprüft, ob für die Steuerelemente auf der Seite ihre jeweiligen AuthorizationFilter Eigenschaftswerte festgelegt admin sind, und gibt, falls ja, zurück true, was bedeutet, dass sie autorisiert und der Seite hinzugefügt werden.

Hinweis

Beachten Sie, dass Steuerelemente hinzugefügt werden, denen der AuthorizationFilter Eigenschaft kein Wert zugewiesen ist, da davon ausgegangen wird, dass sie nicht Teil eines Filterszenarios sind. Dies wäre ein gängiger Ansatz in einem Filterszenario: Einige Steuerelemente würden gefiltert, andere nicht, da angenommen wird, dass sie für alle Benutzer verfügbar sind.

<%@ 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>

Da das Einrichten von Benutzern in Rollen außerhalb des Bereichs dieses Themas liegt, werden in diesem Codebeispiel Benutzerrollen in der Filterung nicht überprüft. Das Szenario des Filterns von Steuerelementen nach Benutzerrollen ist jedoch wahrscheinlich eine der häufigsten Verwendungen dieses Filterfeatures. Wenn Sie Rollen auf Ihrer Website haben und Benutzerrollen in dieser Methode überprüfen möchten, um Steuerelemente zu filtern, ähnelt die Methode dem folgenden Codeblock (im Gegensatz zum einfacheren Ansatz im vorherigen Codebeispiel, in dem keine Rollen verwendet werden).

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;  
  }  
}  

Hinweise

Die OnAuthorizeWebPart -Methode wird von der IsAuthorized -Methode aufgerufen, wenn ein WebPart Steuerelement auf Autorisierung überprüft wird, um einer Seite hinzuzufügen. Wenn die OnAuthorizeWebPart Methode aufgerufen wird, löst sie das AuthorizeWebPart -Ereignis aus, und wenn es eine Handlermethode für das Ereignis gibt, ruft sie den Handler auf.

Der Prozess der Autorisierung WebPart von Steuerelementen ist ein wichtiges Webpartfeature. Jedes WebPart oder Serversteuerelement, das vom WebPartManager Steuerelement einer Zone hinzugefügt wird, durchläuft einen Autorisierungsprozess, um zu bestimmen, ob das Steuerelement hinzugefügt werden kann. Standardmäßig stellt der Webpart-Steuerelementsatz keine Filterkriterien bereit, um zu verhindern, dass Steuerelemente zu einer Zone hinzugefügt werden. Das Steuerelement stellt jedoch die Mechanismen bereit, die Entwickler benötigen, um eigene Filterkriterien zu erstellen. Mithilfe dieser Mechanismen können Sie benutzerdefinierte Filterszenarien erstellen. Sie könnten beispielsweise einen Filter erstellen, damit, wenn ein Benutzer eine Administratorrolle hat, bestimmte Steuerelemente einer Zone hinzugefügt werden, wenn die Seite gerendert wird, und wenn sich der Benutzer in einer Benutzerrolle befindet, werden diese Steuerelemente nicht hinzugefügt.

Die Mechanismen zum Filtern von Steuerelementen während des Autorisierungsprozesses sind die AuthorizationFilter Eigenschaft für WebPart Steuerelemente, die IsAuthorized Methoden und OnAuthorizeWebPart und das AuthorizeWebPart -Ereignis für das WebPartManager -Steuerelement.

Um ein Filterszenario zu erstellen, gibt es im Wesentlichen zwei Aufgaben. Zunächst weisen Sie der Eigenschaft jedes WebPart Steuerelements, das AuthorizationFilter Sie filtern möchten, Zeichenfolgen zu. Diese Zeichenfolgenwerte können beliebig sein, sollten aber die Kriterien enthalten, nach den Sie filtern möchten. Wenn Sie beispielsweise möchten, dass ein bestimmtes Steuerelement nur zu einer Zone hinzugefügt wird, wenn ein Administratorbenutzer die Seite anzeigt, können Sie der -Eigenschaft einen Zeichenfolgenwert von admin zuweisen. Anschließend können Sie das Feature ASP.NET Rollen verwenden und alle Benutzer Ihrer Website verschiedenen Rollen wie Administrator, Manager und Benutzer hinzufügen. Wenn eine Seite geladen wird, überprüft Ihr Filtercode, in welcher Rolle sich ein Benutzer befindet, vergleicht ihn mit dem Autorisierungsfilterwert für ein steuerelement, das überprüft wird, und wenn sich der Benutzer (z. B.) in einer Administratorrolle befindet und Sie den Wert des Steuerelements AuthorizationFilter auf adminfestgelegt haben, könnte das Steuerelement hinzugefügt werden.

Der zweite Schritt beim Erstellen eines Filterszenarios besteht darin, Code zu schreiben, um die AuthorizationFilter Eigenschaftswerte für WebPart Steuerelemente zu überprüfen, und zu bestimmen, ob jedes Steuerelement autorisiert ist, bevor es seiner Zone hinzugefügt wird. Es gibt zwei Optionen für die Platzierung dieses Filtercodes. Die erste Option ist die bevorzugte Option für Seitenentwickler. Sie können eine Methode erstellen, um das AuthorizeWebPart Ereignis direkt im Skriptcode des Webseitenservers oder in einer Codetrennungsdatei zu behandeln. Ordnen Sie Die -Methode dem -Ereignis zu, indem Sie das OnAuthorizeWebPart -Attribut dem -Tag für das WebPartManager Steuerelement auf der Seite hinzufügen, wie im folgenden Beispielmarkupcode gezeigt.

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

Ihre benutzerdefinierte Methode muss nur jedes WebPart Steuerelement auf die Filterkriterien überprüfen und dann basierend auf den Ergebnissen der IsAuthorized Eigenschaft des WebPartAuthorizationEventArgs Objekts einen booleschen Wert zuweisen, um anzugeben, ob das WebPart Steuerelement hinzugefügt werden kann. Der Code im Abschnitt Beispiel veranschaulicht dies.

Die zweite Option für den Speicherort ihres Filtercodes besteht darin, von der WebPartManager -Klasse zu erben und eine Methode zu überschreiben, um die Filterkriterien zu überprüfen. Die beiden Methoden, die Sie dazu außer Kraft setzen können, sind die WebPartManager.IsAuthorized(Type, String, String, Boolean) -Methode oder die OnAuthorizeWebPart -Methode. Obwohl beide Methoden funktionieren würden, ist es in den meisten Fällen vorzuziehen, die IsAuthorized Methode zu überschreiben, da sie Ihnen eine größere programmgesteuerte Kontrolle über den gesamten Autorisierungsprozess bietet, während die OnAuthorizeWebPart Methode nur eine bestimmte Aufgabe ausführt, nämlich das Auslösen des Ereignisses und die Suche nach einem Handler. Ein Codebeispiel für eine benutzerdefinierte WebPartManager Klasse, die die IsAuthorized -Methode außer Kraft setzt, finden Sie in der WebPartManager.IsAuthorized(Type, String, String, Boolean) Überladung der -Methode.

Gilt für:

Weitere Informationen