WebPartManager.OnAuthorizeWebPart(WebPartAuthorizationEventArgs) Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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
Oggetto WebPartAuthorizationEventArgs contenente 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 a uno sviluppatore 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 l'elemento <asp:webpartmanager> ha l'attributo OnAuthorizeWebPart con il nome del gestore eventi assegnato. 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.
Annotazioni
Si noti che anche i controlli che non dispongono di alcun valore assegnato alla AuthorizationFilter proprietà vengono aggiunti, perché si presuppone che non facciano parte di uno scenario di filtro. Questo sarebbe un approccio comune in uno scenario di filtro: alcuni controlli verrebbero filtrati e altri non sarebbero, perché si presuppone che siano 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 vogliono 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 viene chiamato il OnAuthorizeWebPart metodo, 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. Ma 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 è in un ruolo utente, tali controlli non verranno aggiunti.
I meccanismi per filtrare i controlli durante il processo di autorizzazione sono la AuthorizationFilter proprietà sui WebPart controlli, i IsAuthorized metodi e OnAuthorizeWebPart e l'evento AuthorizeWebPart nel WebPartManager controllo.
Per creare uno scenario di filtro, esistono essenzialmente due attività. Prima di tutto, si assegnano stringhe alla AuthorizationFilter proprietà di ogni WebPart controllo da filtrare. Questi valori stringa possono essere arbitrari, ma devono contenere i criteri da filtrare. Ad esempio, se si desidera aggiungere un determinato controllo a una zona solo se un utente amministratore sta visualizzando la pagina, è possibile assegnare un valore stringa di admin alla proprietà . È quindi possibile usare la funzionalità dei ruoli di ASP.NET e aggiungere tutti gli utenti del sito a vari ruoli, ad esempio amministratore, manager e utente. Quando una pagina viene caricata, 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 il valore del AuthorizationFilter controllo è stato impostato su admin, è possibile aggiungere il controllo.
Il secondo passaggio nella 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 propria zona. Sono disponibili due opzioni per la posizione del 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 il metodo personalizzato deve 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 dove 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é offre un maggiore controllo programmatico sull'intero processo di autorizzazione, mentre il OnAuthorizeWebPart metodo esegue una sola attività specifica, che consiste nel 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 .