WebPartManager.OnAuthorizeWebPart(WebPartAuthorizationEventArgs) Metoda

Definicja

Wywołuje zdarzenie AuthorizeWebPart i wywołuje procedurę obsługi dla zdarzenia, jeśli istnieje.

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

Obiekt WebPartAuthorizationEventArgs zawierający dane zdarzenia.

Przykłady

W poniższym przykładzie kodu pokazano, jak ustawić niestandardową procedurę obsługi zdarzeń dla AuthorizeWebPart zdarzenia, aby program obsługi mógł udostępnić niestandardowy kod filtrowania dla OnAuthorizeWebPart metody . Ten przykład jest typowym sposobem, w jaki deweloper strony zapewnia scenariusz filtrowania i autoryzację WebPart kontrolek do dodania do strony.

Na stronie sieci Web zwróć uwagę, że <asp:webpartmanager> element ma OnAuthorizeWebPart atrybut z przypisaną nazwą programu obsługi zdarzeń. Metoda sprawdza, czy kontrolki na stronie mają odpowiednie AuthorizationFilter wartości właściwości ustawione na admin , a jeśli tak, zwraca truewartość , co oznacza, że zostaną autoryzowane i dodane do strony.

Uwaga

Należy pamiętać, że kontrolki, które nie mają żadnej wartości przypisanej AuthorizationFilter do właściwości, są również dodawane, ponieważ zakłada się, że nie są częścią scenariusza filtrowania. Jest to typowe podejście w scenariuszu filtrowania: niektóre kontrolki byłyby filtrowane, a inne nie, ponieważ są one prawdopodobnie dostępne dla wszystkich użytkowników.

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

Ponieważ konfigurowanie użytkowników w rolach wykracza poza zakres tego tematu, ten przykład kodu nie sprawdza ról użytkowników w filtrowaniu. Jednak scenariusz filtrowania kontrolek zgodnie z rolami użytkowników może być jednym z najczęstszych zastosowań tej funkcji filtrowania. Jeśli masz role w witrynie i chcesz sprawdzić role użytkowników w tej metodzie w celu filtrowania kontrolek, metoda będzie przypominać następujący blok kodu (w porównaniu z prostszą metodą w poprzednim przykładzie kodu, który nie używa ról).

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

Uwagi

Metoda jest wywoływana OnAuthorizeWebPart przez metodę IsAuthorized , gdy kontrolka WebPart jest sprawdzana pod kątem autoryzacji do dodania do strony. OnAuthorizeWebPart Gdy metoda jest wywoływana, zgłasza AuthorizeWebPart zdarzenie, a jeśli istnieje metoda obsługi dla zdarzenia, wywołuje procedurę obsługi.

Proces autoryzowania WebPart kontrolek jest ważną funkcją składników Web Part. Każda WebPart kontrolka lub serwer dodawana do strefy przez WebPartManager kontrolkę przechodzi przez proces autoryzacji w celu określenia, czy można dodać kontrolkę. Domyślnie zestaw kontrolek składników Web Part nie udostępnia żadnych kryteriów filtrowania, aby zapobiec dodawaniu kontrolek do strefy. Jednak zestaw kontroli zapewnia mechanizmy niezbędne dla deweloperów do tworzenia własnych kryteriów filtrowania. Za pomocą tych mechanizmów można tworzyć niestandardowe scenariusze filtrowania. Można na przykład utworzyć filtr, aby jeśli użytkownik znajduje się w roli administratora, niektóre kontrolki zostałyby dodane do strefy, gdy strona jest renderowana, a jeśli użytkownik znajduje się w roli użytkownika, te kontrolki nie zostaną dodane.

Mechanizmy filtrowania kontrolek podczas procesu autoryzacji to AuthorizationFilter właściwość kontrolek WebPart , IsAuthorized metod i OnAuthorizeWebPart oraz AuthorizeWebPart zdarzenia w kontrolce WebPartManager .

Aby utworzyć scenariusz filtrowania, zasadniczo istnieją dwa zadania. Najpierw przypisujesz ciągi do AuthorizationFilter właściwości każdej WebPart kontrolki, którą chcesz filtrować. Te wartości ciągów mogą być dowolne, ale powinny zawierać kryteria, według których chcesz filtrować. Jeśli na przykład chcesz, aby dana kontrolka była dodawana do strefy tylko wtedy, gdy administrator wyświetla stronę, możesz przypisać wartość admin ciągu do właściwości . Następnie można użyć funkcji ról ASP.NET i dodać wszystkich użytkowników witryny do różnych ról, takich jak administrator, menedżer i użytkownik. Gdy strona jest ładowana, kod filtrowania sprawdza, w jakiej roli znajduje się użytkownik, porównuje ją z wartością filtru autoryzacji dla sprawdzanej kontrolki, a jeśli (na przykład) użytkownik znajduje się w roli administratora i ustawiłeś wartość kontrolki AuthorizationFilter na admin, kontrolka może zostać dodana.

Drugim krokiem tworzenia scenariusza filtrowania jest napisanie kodu w celu sprawdzenia AuthorizationFilter wartości właściwości w WebPart kontrolkach i określenia, czy każda kontrolka jest autoryzowana przed dodaniu jej do strefy. Istnieją dwie opcje, w których należy umieścić ten kod filtrowania. Pierwsza opcja jest preferowaną opcją dla deweloperów stron. Można utworzyć metodę obsługi AuthorizeWebPart zdarzenia bezpośrednio w kodzie skryptu serwera strony sieci Web lub w pliku separacji kodu. Skojarz metodę ze zdarzeniem, dodając OnAuthorizeWebPart atrybut do tagu WebPartManager kontrolki na stronie, jak pokazano w poniższym przykładowym kodzie znaczników.

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

Cała metoda niestandardowa musi wykonać sprawdzanie każdej WebPart kontrolki pod kątem kryteriów filtrowania, a następnie na podstawie wyników przypisz wartość logiczną do IsAuthorized właściwości WebPartAuthorizationEventArgs obiektu, aby wskazać, czy WebPart można dodać kontrolkę. Kod w sekcji Przykład pokazuje, jak to zrobić.

Drugą opcją miejsca, w którym należy umieścić kod filtrowania, jest dziedziczenie z WebPartManager klasy i zastąpienie metody w celu sprawdzenia kryteriów filtrowania. Dwie metody, które można przesłonić, aby to zrobić, to WebPartManager.IsAuthorized(Type, String, String, Boolean) metoda lub OnAuthorizeWebPart metoda. Mimo że każda z metod działałaby, w większości przypadków zaleca się zastąpienie IsAuthorized metody, ponieważ zapewnia większą kontrolę programową nad całym procesem autoryzacji, natomiast OnAuthorizeWebPart metoda wykonuje tylko jedno konkretne zadanie, które polega na podniesieniu zdarzenia i sprawdzeniu obsługi. Aby zapoznać się z przykładem kodu klasy niestandardowej WebPartManager , która zastępuje IsAuthorized metodę, zobacz WebPartManager.IsAuthorized(Type, String, String, Boolean) przeciążenie metody .

Dotyczy

Zobacz też