WebPartManager.OnAuthorizeWebPart(WebPartAuthorizationEventArgs) Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Déclenche l'événement AuthorizeWebPart et appelle un gestionnaire pour l'événement, le cas échéant.
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)
Paramètres
WebPartAuthorizationEventArgs qui contient des données d’événement.
Exemples
L’exemple de code suivant montre comment définir un gestionnaire d’événements personnalisé pour l’événement AuthorizeWebPart , afin que le gestionnaire puisse fournir du code de filtrage personnalisé pour la OnAuthorizeWebPart méthode. Cet exemple serait un moyen classique pour un développeur de pages de fournir un scénario de filtrage et l’autorisation des WebPart contrôles à ajouter à une page.
Dans la page Web, notez que l’élément <asp:webpartmanager>
a l’attribut OnAuthorizeWebPart
avec le nom du gestionnaire d’événements qui lui est attribué. La méthode vérifie si les contrôles de la page ont leurs valeurs de propriété respectives AuthorizationFilter définies admin
sur et, si c’est le cas, retourne true
, ce qui signifie qu’ils seront autorisés et ajoutés à la page.
Notes
Notez que les contrôles qui n’ont aucune valeur affectée à la AuthorizationFilter propriété sont également ajoutés, car ils sont supposés ne pas faire partie d’un scénario de filtrage. Il s’agit d’une approche courante dans un scénario de filtrage : certains contrôles seraient filtrés et d’autres ne le seraient pas, car ils sont présumés disponibles pour tous les utilisateurs.
<%@ 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>
Étant donné que la configuration des utilisateurs dans des rôles dépasse la portée de cette rubrique, cet exemple de code ne vérifie pas les rôles d’utilisateur dans le filtrage. Toutefois, le scénario de filtrage des contrôles en fonction des rôles d’utilisateur est susceptible d’être l’une des utilisations les plus courantes de cette fonctionnalité de filtrage. Si vous avez des rôles sur votre site et que vous souhaitez vérifier les rôles d’utilisateur dans cette méthode pour filtrer les contrôles, la méthode ressemblerait au bloc de code suivant (contrairement à l’approche plus simple de l’exemple de code précédent, qui n’utilise pas de rôles).
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;
}
}
Remarques
La OnAuthorizeWebPart méthode est appelée par la IsAuthorized méthode, lorsqu’un contrôle est vérifié pour qu’une WebPart autorisation soit ajoutée à une page. Lorsque la OnAuthorizeWebPart méthode est appelée, elle déclenche l’événement AuthorizeWebPart et, s’il existe une méthode de gestionnaire pour l’événement, elle appelle le gestionnaire.
Le processus d’autorisation des WebPart contrôles est une fonctionnalité de composants WebPart importante. Chaque WebPart contrôle serveur ajouté à une zone par le WebPartManager contrôle passe par un processus d’autorisation pour déterminer si le contrôle peut être ajouté. Par défaut, le jeu de contrôles WebPart ne fournit aucun critère de filtrage pour empêcher l’ajout de contrôles à une zone. Toutefois, l’ensemble de contrôles fournit les mécanismes nécessaires pour permettre aux développeurs de créer leurs propres critères de filtrage. À l’aide de ces mécanismes, vous pouvez créer des scénarios de filtrage personnalisés. Par exemple, vous pouvez créer un filtre afin que, si un utilisateur est dans un rôle d’administrateur, certains contrôles soient ajoutés à une zone lorsque la page est affichée, et si l’utilisateur est dans un rôle d’utilisateur, ces contrôles ne sont pas ajoutés.
Les mécanismes de filtrage des contrôles pendant le processus d’autorisation sont la AuthorizationFilter propriété sur WebPart les contrôles, les IsAuthorized méthodes et et OnAuthorizeWebPart l’événement AuthorizeWebPart sur le WebPartManager contrôle.
Pour créer un scénario de filtrage, il existe essentiellement deux tâches. Tout d’abord, vous affectez des chaînes à la AuthorizationFilter propriété de chaque WebPart contrôle que vous souhaitez filtrer. Ces valeurs de chaîne peuvent être arbitraires, mais elles doivent contenir les critères sur lesquels vous souhaitez filtrer. Par exemple, si vous souhaitez qu’un contrôle donné soit ajouté à une zone uniquement si un utilisateur administrateur affiche la page, vous pouvez affecter une valeur de chaîne à admin
la propriété . Vous pouvez ensuite utiliser la fonctionnalité ASP.NET rôles et ajouter tous les utilisateurs de votre site à différents rôles, tels que administrateur, gestionnaire et utilisateur. Lorsqu’une page est en cours de chargement, votre code de filtrage vérifie le rôle dans lequel se trouve un utilisateur, le compare à la valeur de filtre d’autorisation sur un contrôle en cours de vérification et si (par exemple) l’utilisateur est dans un rôle administrateur et que vous avez défini la valeur du AuthorizationFilter contrôle sur admin
, le contrôle peut être ajouté.
La deuxième étape de la création d’un scénario de filtrage consiste à écrire du code pour vérifier les valeurs de AuthorizationFilter propriété sur WebPart les contrôles et déterminer si chaque contrôle est autorisé avant d’être ajouté à sa zone. Il existe deux options pour placer ce code de filtrage. La première option est l’option préférée pour les développeurs de pages. Vous pouvez créer une méthode pour gérer l’événement AuthorizeWebPart directement dans le code de script du serveur de pages web ou dans un fichier de séparation de code. Associez votre méthode à l’événement en ajoutant l’attribut OnAuthorizeWebPart
à la balise du WebPartManager contrôle dans la page, comme indiqué dans l’exemple de code de balisage suivant.
<asp:webpartmanager id="manager1" runat="server"
OnAuthorizeWebPart="manager1_AuthorizeWebPart" />
Tout ce que votre méthode personnalisée doit faire est de vérifier chaque WebPart contrôle pour les critères de filtrage, puis, en fonction des résultats, d’affecter une valeur booléenne à la IsAuthorized propriété de l’objet WebPartAuthorizationEventArgs pour indiquer si le WebPart contrôle peut être ajouté. Le code de la section Exemple montre comment procéder.
La deuxième option pour savoir où placer votre code de filtrage consiste à hériter de la WebPartManager classe et à remplacer une méthode pour vérifier les critères de filtre. Les deux méthodes que vous pouvez remplacer pour ce faire sont la WebPartManager.IsAuthorized(Type, String, String, Boolean) méthode ou la OnAuthorizeWebPart méthode . Bien que l’une ou l’autre méthode fonctionne, dans la plupart des cas, il est préférable de remplacer la IsAuthorized méthode, car elle vous offre un meilleur contrôle par programme sur l’ensemble du processus d’autorisation, tandis que la OnAuthorizeWebPart méthode effectue une seule tâche spécifique, qui consiste à déclencher l’événement et à rechercher un gestionnaire. Pour obtenir un exemple de code d’une classe personnalisée WebPartManager qui remplace la IsAuthorized méthode, consultez la WebPartManager.IsAuthorized(Type, String, String, Boolean) surcharge de la méthode.