WebPartManager.OnAuthorizeWebPart(WebPartAuthorizationEventArgs) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Produce el evento AuthorizeWebPart e invoca un controlador para el evento, si existe uno.
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)
Parámetros
Objeto WebPartAuthorizationEventArgs que contiene datos de eventos.
Ejemplos
En el ejemplo de código siguiente se muestra cómo establecer un controlador de eventos personalizado para el AuthorizeWebPart evento, de modo que el controlador pueda proporcionar código de filtrado personalizado para el OnAuthorizeWebPart método . Este ejemplo sería una manera típica de que un desarrollador de páginas proporcione un escenario de filtrado y autorización de WebPart controles que se van a agregar a una página.
En la página web, observe que el <asp:webpartmanager>
elemento tiene el OnAuthorizeWebPart
atributo con el nombre del controlador de eventos asignado. El método comprueba si los controles de la página tienen sus respectivos AuthorizationFilter valores de propiedad establecidos admin
en y, si es así, devuelve true
, lo que significa que se autorizarán y agregarán a la página.
Nota
Tenga en cuenta que también se agregan controles que no tienen ningún valor asignado a la AuthorizationFilter propiedad, ya que se supone que no forman parte de un escenario de filtrado. Este sería un enfoque común en un escenario de filtrado: algunos controles se filtrarían y otros no lo serían, ya que se supone que están disponibles para todos los usuarios.
<%@ 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>
Dado que la configuración de usuarios en roles está fuera del ámbito de este tema, este ejemplo de código no comprueba los roles de usuario en el filtrado. Sin embargo, es probable que el escenario de filtrado de controles según los roles de usuario sea uno de los usos más comunes de esta característica de filtrado. Si tiene roles en el sitio y desea comprobar los roles de usuario de este método para filtrar controles, el método se parecería al siguiente bloque de código (frente al enfoque más sencillo del ejemplo de código anterior, que no usa roles).
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;
}
}
Comentarios
El OnAuthorizeWebPart método llama al IsAuthorized método cuando se comprueba una autorización para agregar un WebPart control a una página. Cuando se llama al OnAuthorizeWebPart método , genera el AuthorizeWebPart evento y, si hay un método de controlador para el evento, invoca al controlador.
El proceso de autorización WebPart de controles es una característica importante de elementos web. Cada WebPart control de servidor o que el control agrega a una zona pasa por WebPartManager un proceso de autorización para determinar si se puede agregar el control. De forma predeterminada, el conjunto de controles de elementos web no proporciona ningún criterio de filtrado para evitar que los controles se agreguen a una zona. Pero el conjunto de controles proporciona los mecanismos necesarios para que los desarrolladores creen sus propios criterios de filtrado. Mediante estos mecanismos, puede crear escenarios de filtrado personalizados. Por ejemplo, podría crear un filtro para que, si un usuario está en un rol de administrador, ciertos controles se agregarían a una zona cuando se representa la página y, si el usuario está en un rol de usuario, esos controles no se agregarían.
Los mecanismos para filtrar controles durante el proceso de autorización son la AuthorizationFilter propiedad en WebPart los controles, los IsAuthorized métodos y OnAuthorizeWebPart y el AuthorizeWebPart evento del WebPartManager control.
Para crear un escenario de filtrado, básicamente hay dos tareas. En primer lugar, asigne cadenas a la AuthorizationFilter propiedad de cada WebPart control que quiera filtrar. Estos valores de cadena pueden ser arbitrarios, pero deben contener los criterios en los que desea filtrar. Por ejemplo, si desea que un control determinado se agregue a una zona solo si un usuario administrador está viendo la página, puede asignar un valor de cadena de admin
a la propiedad . A continuación, puede usar la característica de roles de ASP.NET y agregar todos los usuarios del sitio a varios roles, como administrador, administrador y usuario. Cuando se carga una página, el código de filtrado comprobaría en qué rol está un usuario, compararlo con el valor del filtro de autorización en un control que se está comprobando y, si (por ejemplo) el usuario está en un rol de administrador y había establecido el valor admin
del AuthorizationFilter control en , se podría agregar el control.
El segundo paso para crear un escenario de filtrado es escribir código para comprobar los AuthorizationFilter valores de propiedad en WebPart los controles y determinar si cada control está autorizado antes de agregarlo a su zona. Hay dos opciones para dónde colocar este código de filtrado. La primera opción es la opción preferida para desarrolladores de páginas. Puede crear un método para controlar el AuthorizeWebPart evento directamente en el código de script del servidor de páginas web o en un archivo de separación de código. Asocie el método con el evento agregando el OnAuthorizeWebPart
atributo a la etiqueta del WebPartManager control de la página, como se muestra en el siguiente código de marcado de ejemplo.
<asp:webpartmanager id="manager1" runat="server"
OnAuthorizeWebPart="manager1_AuthorizeWebPart" />
Todo lo que tiene que hacer el método personalizado es comprobar cada WebPart control para los criterios de filtrado y, a continuación, en función de los resultados, asignar un valor booleano a la IsAuthorized propiedad del WebPartAuthorizationEventArgs objeto para indicar si se puede agregar el WebPart control. El código de la sección Ejemplo muestra cómo hacerlo.
La segunda opción para dónde colocar el código de filtrado es heredar de la WebPartManager clase e invalidar un método para comprobar los criterios de filtro. Los dos métodos que puede invalidar para hacerlo son el WebPartManager.IsAuthorized(Type, String, String, Boolean) método o el OnAuthorizeWebPart método . Aunque cualquiera de los métodos funcionaría, en la mayoría de los casos es preferible invalidar el IsAuthorized método, ya que proporciona un mayor control mediante programación sobre todo el proceso de autorización, mientras que el OnAuthorizeWebPart método hace solo una tarea específica, que es generar el evento y comprobar si hay un controlador. Para obtener un ejemplo de código de una clase personalizada WebPartManager que invalida el IsAuthorized método, consulte la WebPartManager.IsAuthorized(Type, String, String, Boolean) sobrecarga del método .