Condividi tramite


WebPartManager.OnAuthorizeWebPart(WebPartAuthorizationEventArgs) Metodo

Definizione

Genera l'evento AuthorizeWebPart e richiama un gestore per l'evento, se presente.

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)

Parametri

e
WebPartAuthorizationEventArgs

WebPartAuthorizationEventArgs in cui sono contenuti i dati dell'evento.

Esempio

Nell'esempio di codice seguente viene illustrato come impostare un gestore eventi personalizzato per l'evento AuthorizeWebPart , in modo che il gestore possa fornire codice di filtro personalizzato per il OnAuthorizeWebPart metodo . Questo esempio è un modo tipico per consentire agli sviluppatori di pagine di fornire uno scenario di filtro e l'autorizzazione dei WebPart controlli da aggiungere a una pagina.

Nella pagina Web si noti che all'elemento <asp:webpartmanager> è assegnato l'attributo OnAuthorizeWebPart con il nome del gestore eventi. Il metodo controlla se i controlli nella pagina hanno i rispettivi AuthorizationFilter valori delle proprietà impostati su admin e, in tal caso, restituisce true, il che significa che verranno autorizzati e aggiunti alla pagina.

Nota

Si noti che vengono aggiunti anche i controlli che non dispongono di alcun valore assegnato alla AuthorizationFilter proprietà, perché si presuppone che non facciano parte di uno scenario di filtro. Si tratta di un approccio comune in uno scenario di filtro: alcuni controlli verrebbero filtrati e altri non sarebbero disponibili per tutti gli utenti.

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

Poiché la configurazione degli utenti nei ruoli non rientra nell'ambito di questo argomento, questo esempio di codice non controlla i ruoli utente nel filtro. Tuttavia, è probabile che lo scenario dei controlli di filtro in base ai ruoli utente sia uno degli usi più comuni di questa funzionalità di filtro. Se si dispone di ruoli nel sito e si desidera controllare i ruoli utente in questo metodo per filtrare i controlli, il metodo sarà simile al blocco di codice seguente (rispetto all'approccio più semplice nell'esempio di codice precedente, che non usa ruoli).

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

Commenti

Il OnAuthorizeWebPart metodo viene chiamato dal IsAuthorized metodo , quando un WebPart controllo viene controllato per l'autorizzazione da aggiungere a una pagina. Quando il OnAuthorizeWebPart metodo viene chiamato, genera l'evento AuthorizeWebPart e, se è presente un metodo del gestore per l'evento, richiama il gestore.

Il processo di autorizzazione WebPart dei controlli è una funzionalità importante delle web part. Ogni WebPart controllo server o aggiunto a una zona dal WebPartManager controllo esegue un processo di autorizzazione per determinare se il controllo può essere aggiunto. Per impostazione predefinita, il set di controlli Web part non fornisce criteri di filtro per impedire l'aggiunta di controlli a una zona. Tuttavia, il set di controlli fornisce i meccanismi necessari per gli sviluppatori per creare i propri criteri di filtro. Usando questi meccanismi, è possibile creare scenari di filtro personalizzati. Ad esempio, è possibile creare un filtro in modo che, se un utente si trova in un ruolo di amministratore, determinati controlli verranno aggiunti a una zona quando viene eseguito il rendering della pagina e, se l'utente si trova in un ruolo utente, tali controlli non verranno aggiunti.

I meccanismi per filtrare i controlli durante il processo di autorizzazione sono la AuthorizationFilter proprietà nei WebPart controlli, nei IsAuthorized metodi e OnAuthorizeWebPart e nell'evento AuthorizeWebPart nel WebPartManager controllo.

Per creare uno scenario di filtro, sono disponibili essenzialmente due attività. Prima di tutto, si assegnano stringhe alla AuthorizationFilter proprietà di ogni WebPart controllo che si vuole filtrare. Questi valori stringa possono essere arbitrari, ma devono contenere i criteri da filtrare. Ad esempio, se si vuole aggiungere un determinato controllo a una zona solo se un utente amministratore visualizza la pagina, è possibile assegnare un valore stringa di admin alla proprietà . È quindi possibile usare la funzionalità dei ruoli ASP.NET e aggiungere tutti gli utenti del sito a vari ruoli, ad esempio amministratore, manager e utente. Quando viene caricata una pagina, il codice di filtro controlla il ruolo in cui si trova un utente, lo confronta con il valore del filtro di autorizzazione su un controllo controllato e, ad esempio, se l'utente si trova in un ruolo di amministratore e si è impostato il valore del AuthorizationFilter controllo su admin, è possibile aggiungere il controllo.

Il secondo passaggio della creazione di uno scenario di filtro consiste nel scrivere codice per controllare i valori delle AuthorizationFilter proprietà nei WebPart controlli e determinare se ogni controllo è autorizzato prima che venga aggiunto alla relativa zona. Sono disponibili due opzioni per inserire questo codice di filtro. La prima opzione è l'opzione preferita per gli sviluppatori di pagine. È possibile creare un metodo per gestire l'evento AuthorizeWebPart direttamente nel codice script del server della pagina Web o in un file di separazione del codice. Associare il metodo all'evento aggiungendo l'attributo OnAuthorizeWebPart al tag per il WebPartManager controllo nella pagina, come illustrato nel codice di markup di esempio seguente.

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

Tutto ciò che è necessario fare è controllare ogni WebPart controllo per i criteri di filtro e quindi, in base ai risultati, assegnare un valore booleano alla IsAuthorized proprietà dell'oggetto WebPartAuthorizationEventArgs per indicare se il WebPart controllo può essere aggiunto. Il codice nella sezione Esempio illustra come eseguire questa operazione.

La seconda opzione per la posizione in cui inserire il codice di filtro consiste nell'ereditare dalla WebPartManager classe ed eseguire l'override di un metodo per controllare i criteri di filtro. I due metodi di cui è possibile eseguire l'override per eseguire questa operazione sono il WebPartManager.IsAuthorized(Type, String, String, Boolean) metodo o il OnAuthorizeWebPart metodo . Sebbene entrambi i metodi funzionino, nella maggior parte dei casi è preferibile eseguire l'override del IsAuthorized metodo, perché fornisce un maggiore controllo programmatico sull'intero processo di autorizzazione, mentre il OnAuthorizeWebPart metodo esegue una sola attività specifica, ovvero generare l'evento e verificare la presenza di un gestore. Per un esempio di codice di una classe personalizzata WebPartManager che esegue l'override del IsAuthorized metodo, vedere l'overload WebPartManager.IsAuthorized(Type, String, String, Boolean) del metodo .

Si applica a

Vedi anche