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, s’il en existe un.
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
Qui WebPartAuthorizationEventArgs 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 portant 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 et, le cas échéant, retourne true, ce qui signifie qu’ils seront autorisés et ajoutés à la page.
Note
Notez que les contrôles qui n’ont aucune valeur affectée à la AuthorizationFilter propriété sont également ajoutés, car ils ne font pas partie d’un scénario de filtrage. Il s’agirait 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 supposés être 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 utilisateur dans cette méthode pour filtrer les contrôles, la méthode ressemble au bloc de code suivant (par opposition à l’approche plus simple dans 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 WebPart contrôle est vérifié pour que l’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 ou 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 Composants WebPart ne fournit aucun critère de filtrage pour empêcher l’ajout de contrôles à une zone. Mais l’ensemble de contrôles fournit les mécanismes nécessaires aux développeurs pour créer leurs propres critères de filtrage. En utilisant 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 se trouve dans un rôle d’administrateur, certains contrôles sont 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 seront 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 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 à filtrer. Par exemple, si vous souhaitez qu’un contrôle donné soit ajouté à une zone uniquement si un utilisateur administrateur consulte 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 l’administrateur, le gestionnaire et l’utilisateur. Lorsqu’une page est chargée, votre code de filtrage vérifie le rôle dans lequel un utilisateur se trouve, comparez-le à la valeur du filtre d’autorisation sur un contrôle en cours d’archivage, et si (par exemple) l’utilisateur se trouve dans un rôle d’administrateur et que vous aviez défini la valeur admindu AuthorizationFilter contrôle sur , 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" />
Toutes vos méthodes personnalisées doivent effectuer la vérification de chaque WebPart contrôle pour les critères de filtrage, puis, en fonction des résultats, attribuez 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 permettant de 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 fournit un meilleur contrôle programmatique sur l’ensemble du processus d’autorisation, tandis que la OnAuthorizeWebPart méthode ne fait qu’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.