Freigeben über


WebPartManager.OnAuthorizeWebPart(WebPartAuthorizationEventArgs) Methode

Definition

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

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

e
WebPartAuthorizationEventArgs

Ein WebPartAuthorizationEventArgs Objekt, das Ereignisdaten enthält.

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 Element das <asp:webpartmanager>OnAuthorizeWebPart Attribut mit dem Namen des ihm zugewiesenen Ereignishandlers hat. Die Methode überprüft, ob die Steuerelemente auf der Seite ihre jeweiligen AuthorizationFilter Eigenschaftswerte festgelegt admin haben, und wenn ja, gibt sie zurück true, was bedeutet, dass sie autorisiert und der Seite hinzugefügt werden.

Hinweis

Beachten Sie, dass Steuerelemente, die AuthorizationFilter der Eigenschaft keinen Wert zugewiesen haben, ebenfalls hinzugefügt werden, 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 und andere nicht, da 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 über den Umfang dieses Themas hinausgeht, überprüft dieses Codebeispiel keine Benutzerrollen in der Filterung. Das Szenario der Filtersteuerelemente nach Benutzerrollen ist jedoch wahrscheinlich eine der häufigsten Verwendungsmöglichkeiten dieses Filterfeatures. Wenn Sie über Rollen auf Ihrer Website verfügen und Benutzerrollen in dieser Methode überprüfen möchten, um Steuerelemente zu filtern, würde die Methode dem folgenden Codeblock ähneln (im Vergleich zum einfacheren Ansatz im vorherigen Codebeispiel, bei 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 die Autorisierung überprüft wird, die einer Seite hinzugefügt werden soll. Wenn die OnAuthorizeWebPart Methode aufgerufen wird, löst sie das AuthorizeWebPart Ereignis aus, und wenn es eine Handlermethode für das Ereignis gibt, wird der Handler aufgerufen.

Der Prozess der Autorisierung WebPart von Steuerelementen ist ein wichtiges Webpartfeature. Jedes WebPart Oder serversteuerelement, das einer Zone durch das WebPartManager Steuerelement hinzugefügt wird, durchläuft einen Autorisierungsprozess, um zu bestimmen, ob das Steuerelement hinzugefügt werden kann. Standardmäßig stellt der Steuerelementsatz für Webparts keine Filterkriterien bereit, um zu verhindern, dass Steuerelemente einer Zone hinzugefügt werden. Der Steuerelementsatz stellt jedoch die Mechanismen bereit, die für Entwickler erforderlich sind, um eigene Filterkriterien zu erstellen. Mithilfe dieser Mechanismen können Sie benutzerdefinierte Filterszenarien erstellen. Sie könnten beispielsweise einen Filter erstellen, damit bestimmte Steuerelemente, wenn sich ein Benutzer in einer Administratorrolle befindet, zu einer Zone hinzugefügt werden, wenn die Seite gerendert wird. 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 das AuthorizeWebPart Ereignis für das WebPartManager Steuerelement.

Um ein Filterszenario zu erstellen, gibt es im Wesentlichen zwei Aufgaben. Zunächst weisen Sie der AuthorizationFilter Eigenschaft jedes WebPart Steuerelements, das Sie filtern möchten, Zeichenfolgen zu. Diese Zeichenfolgenwerte können beliebig sein, aber sie sollten die Kriterien enthalten, nach der Sie filtern möchten. Wenn Sie z. B. möchten, dass ein bestimmtes Steuerelement nur einer Zone hinzugefügt wird, wenn ein Administratorbenutzer die Seite anzeigt, können Sie der Eigenschaft einen Zeichenfolgenwert admin zuweisen. Anschließend können Sie das Feature ASP.NET Rollen verwenden und alle Benutzer Ihrer Website zu verschiedenen Rollen wie Administrator, Vorgesetzter und Benutzer hinzufügen. Wenn eine Seite geladen wird, überprüft Ihr Filtercode, welche Rolle ein Benutzer hat, vergleicht sie mit dem Autorisierungsfilterwert für ein zu überprüfende Steuerelement, und wenn (z. B.) der Benutzer in einer Administratorrolle ist und Sie den Wert des Steuerelements AuthorizationFilter auf admin festgelegt 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 zu seiner Zone hinzugefügt wird. Es gibt zwei Optionen zum Platzieren 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" />

Alle Benutzerdefinierten Methoden müssen jedes WebPart Steuerelement auf die Filterkriterien überprüfen und dann basierend auf den Ergebnissen einen booleschen Wert der IsAuthorized Eigenschaft des WebPartAuthorizationEventArgs Objekts zuweisen, um anzugeben, ob das WebPart Steuerelement hinzugefügt werden kann. Der Code im Beispielabschnitt veranschaulicht, wie dies funktioniert.

Die zweite Option zum Platzieren des Filtercodes besteht darin, von der WebPartManager Klasse zu erben und eine Methode zum Überprüfen der Filterkriterien außer Kraft zu setzen. Die beiden Methoden, die Sie 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 außer Kraft zu setzen, da sie Ihnen eine größere programmgesteuerte Kontrolle über den gesamten Autorisierungsprozess bietet, während die OnAuthorizeWebPart Methode nur eine bestimmte Aufgabe ausführt, die das Ereignis auslöst und nach einem Handler sucht. Ein Codebeispiel für eine benutzerdefinierte WebPartManager Klasse, die die IsAuthorized Methode außer Kraft setzt, finden Sie unter der WebPartManager.IsAuthorized(Type, String, String, Boolean) Überladung der Methode.

Gilt für:

Weitere Informationen