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
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 .