WebPartManager.IsAuthorized Método

Definición

Determina si se puede agregar un control WebPart u otro control de servidor a una página.

Sobrecargas

IsAuthorized(WebPart)

Realiza los pasos iniciales para determinar si un control tiene autorización para ser agregado a una página.

IsAuthorized(Type, String, String, Boolean)

Realiza los pasos finales para determinar si un control tiene autorización para ser agregado a una página.

Comentarios

Parte de la flexibilidad de la característica de elementos web es la capacidad de agregar controles de servidor a páginas web en tiempo de ejecución. Hay una serie de escenarios comunes en los que se puede agregar un control de servidor (que puede ser un control personalizado, un control de servidor personalizado WebPart , un control de usuario o un control ASP.NET).

En los siguientes escenarios comunes, el conjunto de controles de elementos web intenta agregar controles de servidor a una página y IsAuthorized se llama al método para autorizarlos:

  • Cuando se agrega un control de servidor declarando en el marcado de una página web dentro de una WebPartZoneBase zona.

  • Cuando se agrega un control de servidor mediante programación a una zona.

  • Cuando un usuario importa un control de servidor en un catálogo de controles de elementos web.

  • Cuando se carga un control de servidor existente desde el almacén de datos de personalización.

  • Cuando se agrega un control de servidor a un DeclarativeCatalogPart control para que esté disponible en un catálogo de controles de servidor.

En cada escenario en el que se agregan controles, IsAuthorized se llama al método para asegurarse de que se han cumplido todos los criterios de autorización para permitir que se agregue un control. Cuando se autoriza un control, se agrega normalmente como sería si no hubiera ningún escenario de filtrado. Cuando un control no está autorizado, el conjunto de controles de elementos web puede responder de varias maneras, en función del contexto. El conjunto de controles puede producir un error silencioso para agregar una parte no autorizada (si no es necesario informar al usuario), puede mostrar un mensaje de error o puede agregar una instancia de la UnauthorizedWebPart clase como marcador de posición. Este objeto de marcador de posición no está visible en la página, pero está visible en el código fuente de la página para indicar que se ha excluido un control no autorizado.

El determinante de si un control está autorizado es el filtro de autorización. Un filtro de autorización es una característica del conjunto de controles de elementos web que permite a los desarrolladores excluir de una página los controles que no cumplen los criterios especificados.

Para crear un escenario de filtrado, los desarrolladores deben hacer dos cosas. En primer lugar, deben asignar un valor de cadena (el valor puede ser arbitrario) a la AuthorizationFilter propiedad de cada WebPart control que planean usar en el escenario. También pueden asignar un valor a esta propiedad para otros tipos de controles de servidor que no WebPart son controles, ya que si se colocan en WebPartZoneBase zonas, estos controles se encapsulan con un GenericWebPart control en tiempo de ejecución y este control hereda la AuthorizationFilter propiedad .

El segundo paso necesario para crear un escenario de filtrado es invalidar el IsAuthorized(Type, String, String, Boolean) método o crear un controlador de eventos para el AuthorizeWebPart evento. En estos métodos, un desarrollador puede comprobar la AuthorizationFilter propiedad y, si el valor indica que el control no debe estar autorizado, el desarrollador garantiza que el IsAuthorized método devuelve un valor de false.

Nota

Para obtener ejemplos de código y una descripción de cómo configurar un escenario de filtrado personalizado mediante el IsAuthorized método , consulte los temas de las sobrecargas del método .

IsAuthorized(WebPart)

Realiza los pasos iniciales para determinar si un control tiene autorización para ser agregado a una página.

public:
 bool IsAuthorized(System::Web::UI::WebControls::WebParts::WebPart ^ webPart);
public bool IsAuthorized (System.Web.UI.WebControls.WebParts.WebPart webPart);
member this.IsAuthorized : System.Web.UI.WebControls.WebParts.WebPart -> bool
Public Function IsAuthorized (webPart As WebPart) As Boolean

Parámetros

webPart
WebPart

Control WebPart u otro control de servidor cuya autorización se comprueba.

Devoluciones

Valor booleano que indica si webPart se puede agregar a una página.

Excepciones

webPart es null.

Ejemplos

En el ejemplo de código siguiente se muestra cómo llamar al método desde el IsAuthorized(WebPart) código para determinar si un control está autorizado para agregarse a una página.

El ejemplo de código tiene tres partes:

  • Control personalizado WebPartManager que invalida el IsAuthorized método .

  • Página web que crea un filtro para un WebPart control.

  • Explicación de cómo ejecutar el ejemplo de código.

En este ejemplo de código se usa un control personalizado WebPartManager que invalida el IsAuthorized(Type, String, String, Boolean) método de sobrecarga para proporcionar un control personalizado de la AuthorizationFilter propiedad . Este control comprueba si hay un valor de propiedad de admin y, si el valor está presente, autoriza el control. Si un control tiene un valor diferente, no está autorizado; los controles sin el valor de propiedad también están autorizados, ya que se supone que no forman parte del escenario de filtrado.

Para que se ejecute este ejemplo de código, debe compilar este código fuente. Puede compilarlo explícitamente y colocar el ensamblado resultante en la carpeta Bin del sitio web o en la caché global de ensamblados. Como alternativa, puede colocar el código fuente en la carpeta App_Code del sitio, donde se compilará dinámicamente en tiempo de ejecución. En este ejemplo de código se usa el método de compilación dinámico. Para ver un tutorial que muestra cómo compilar, consulte Tutorial: Desarrollo y uso de un control de servidor web personalizado.

using System;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace Samples.AspNet.CS.Controls
{
  public class MyManagerAuthorize : WebPartManager
  {
    public override bool IsAuthorized(Type type, string path, string authorizationFilter, bool isShared)
    {
      if (!String.IsNullOrEmpty(authorizationFilter))
      {
        if (authorizationFilter == "admin")
          return true;
        else
          return false;
      }
      else
            {
                return true;
            }
        }
  }
}
Imports System.Web
Imports System.Web.Security
Imports System.Security.Permissions
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts

Namespace Samples.AspNet.VB.Controls

  <AspNetHostingPermission(SecurityAction.Demand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  <AspNetHostingPermission(SecurityAction.InheritanceDemand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  Public Class MyManagerAuthorize
    Inherits WebPartManager

    Public Overrides Function IsAuthorized(ByVal type As Type, _
      ByVal path As String, ByVal authorizationFilter As String, _
      ByVal isShared As Boolean) As Boolean

      If Not String.IsNullOrEmpty(authorizationFilter) Then
        If authorizationFilter = "admin" Then
          Return True
        Else
          Return False
        End If
      Else
        Return True
      End If

    End Function

  End Class

End Namespace

La segunda parte del ejemplo de código crea un filtro que puede excluir un control. La página web siguiente contiene tres controles de servidor ASP.NET en un <asp:webpartzone> elemento . Observe que los controles primero y segundo tienen sus AuthorizationFilter propiedades establecidas en valores diferentes y la tercera no asigna la propiedad . Este valor de autorización se puede comprobar en tiempo de ejecución y el control se puede agregar a la página si el filtro coincide con los criterios establecidos por el desarrollador. Observe también que en el Page_Load método , el código llama al IsAuthorized(WebPart) método para determinar si cada uno de los controles está autorizado y, si es así, establece la propiedad de ExportMode cada control.

<%@ Page Language="C#" %>
<%@ Register Namespace="Samples.AspNet.CS.Controls" 
    TagPrefix="aspSample"%>


<!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 Page_Load(object sender, EventArgs e)
  {
    foreach (WebPart part in mgr1.WebParts)
    {
      if (mgr1.IsAuthorized(part))
        part.ExportMode = WebPartExportMode.All;
    }
    
  }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <aspSample:MyManagerAuthorize ID="mgr1" runat="server"  />
      <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"
            AuthorizationFilter="user" />
          <asp:Calendar ID="Calendar1" runat="server"></asp:Calendar>
        </ZoneTemplate>
      </asp:WebPartZone>
      <hr />
      <asp:Literal ID="Literal1" runat="server"></asp:Literal>
    </div>
    </form>
</body>
</html>
<%@ Page Language="vb" %>
<%@ Register Namespace="Samples.AspNet.VB.Controls" 
    TagPrefix="aspSample"%>


<!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 Page_Load(ByVal sender As Object, _
    ByVal e As System.EventArgs)
    
    Dim part As WebPart
    For Each part In mgr1.WebParts
      If mgr1.IsAuthorized(part) Then
        part.ExportMode = WebPartExportMode.All
      End If
    Next
  End Sub

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <aspSample:MyManagerAuthorize ID="mgr1" runat="server"  />
      <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"
            AuthorizationFilter="user" />
          <asp:Calendar ID="Calendar1" runat="server"></asp:Calendar>
        </ZoneTemplate>
      </asp:WebPartZone>
      <hr />
      <asp:Literal ID="Literal1" runat="server"></asp:Literal>
    </div>
    </form>
</body>
</html>

Tenga en cuenta que para que el ejemplo de código funcione, debe agregar una configuración en el archivo Web.config para habilitar la exportación de archivos de descripción de elementos web. Asegúrese de que tiene un archivo Web.config en el mismo directorio que la página web para este ejemplo de código. En la <system.web> sección , asegúrese de que hay un <webParts> elemento con un enableExport atributo establecido trueen , como en el marcado siguiente.

<webParts enableExport="true">

...

</webParts>

Después de cargar la página en un explorador, tenga en cuenta que se muestra el primer control, ya que coincide con los criterios del método invalidado. El segundo control no se agrega a la página, ya que está excluido por el filtro. También se agrega el tercer control, porque no tiene su AuthorizationFilter propiedad establecida. Observe que si hace clic en el icono del menú verbos en la barra de título de cualquiera de los controles, ambos se pueden exportar porque se asignaron sus respectivos ExportMode valores de propiedad.

Comentarios

El IsAuthorized método es el método inicial al que llama el control de elementos web establecido para comprobar la autorización de un WebPart control. webPart Acepta como parámetro y comienza un proceso que, en última instancia, determina si el control se agregará a una página. Llame a este método desde el código directamente cuando necesite determinar si se autoriza un control determinado.

Este método lleva a cabo las tareas iniciales para determinar si el control hereda de la WebPart clase o es un GenericWebPart control y, si es así, qué tipo de control secundario contiene. Para finalizar la tarea de autorización, llama al IsAuthorized(Type, String, String, Boolean) método de sobrecarga.

Notas a los autores de las llamadas

Se llama a este método directamente desde el código. Si desea obtener un mayor control mediante programación sobre el proceso de autorización, puede invalidar el IsAuthorized(Type, String, String, Boolean) método de sobrecarga.

Consulte también

Se aplica a

IsAuthorized(Type, String, String, Boolean)

Realiza los pasos finales para determinar si un control tiene autorización para ser agregado a una página.

public:
 virtual bool IsAuthorized(Type ^ type, System::String ^ path, System::String ^ authorizationFilter, bool isShared);
public virtual bool IsAuthorized (Type type, string path, string authorizationFilter, bool isShared);
abstract member IsAuthorized : Type * string * string * bool -> bool
override this.IsAuthorized : Type * string * string * bool -> bool
Public Overridable Function IsAuthorized (type As Type, path As String, authorizationFilter As String, isShared As Boolean) As Boolean

Parámetros

type
Type

Type del control cuya autorización se está comprobando.

path
String

Ruta de acceso de la aplicación relativa al archivo de código fuente del control que se está autorizando, si el control es un control de usuario.

authorizationFilter
String

Valor de cadena arbitrario que se asigna a la propiedad AuthorizationFilter de un control WebPart que se utiliza para autorizar si un control se puede agregar a una página.

isShared
Boolean

Indica si el control cuya autorización se está comprobando es un control compartido, lo que significa que estará visible para muchos o todos los usuarios de la aplicación y que el valor de su propiedad IsShared está establecido en true.

Devoluciones

Valor booleano que indica si un control tiene autorización para ser agregado a una página.

Excepciones

type es null.

type es un control de usuario y path es null o una cadena vacía ("").

o bien

type no es un control de usuario y path tiene un valor asignado a él.

Ejemplos

En el ejemplo de código siguiente se muestra cómo invalidar el IsAuthorized método para determinar si un control está autorizado para agregarse a una página.

El primer paso es crear un filtro que pueda excluir un control. La página web siguiente contiene tres controles de servidor ASP.NET en un <asp:webpartzone> elemento . Observe que los controles primero y segundo tienen sus AuthorizationFilter propiedades establecidas en valores diferentes y la tercera no asigna la propiedad . Este valor de autorización se puede comprobar en tiempo de ejecución y el control se puede agregar a la página si el filtro coincide con los criterios establecidos por el desarrollador.

<%@ Page Language="C#" %>
<%@ Register Namespace="Samples.AspNet.CS.Controls" 
    TagPrefix="aspSample"%>


<!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 Page_Load(object sender, EventArgs e)
  {
    foreach (WebPart part in mgr1.WebParts)
    {
      if (mgr1.IsAuthorized(part))
        part.ExportMode = WebPartExportMode.All;
    }
    
  }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <aspSample:MyManagerAuthorize ID="mgr1" runat="server"  />
      <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"
            AuthorizationFilter="user" />
          <asp:Calendar ID="Calendar1" runat="server"></asp:Calendar>
        </ZoneTemplate>
      </asp:WebPartZone>
      <hr />
      <asp:Literal ID="Literal1" runat="server"></asp:Literal>
    </div>
    </form>
</body>
</html>
<%@ Page Language="vb" %>
<%@ Register Namespace="Samples.AspNet.VB.Controls" 
    TagPrefix="aspSample"%>


<!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 Page_Load(ByVal sender As Object, _
    ByVal e As System.EventArgs)
    
    Dim part As WebPart
    For Each part In mgr1.WebParts
      If mgr1.IsAuthorized(part) Then
        part.ExportMode = WebPartExportMode.All
      End If
    Next
  End Sub

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <aspSample:MyManagerAuthorize ID="mgr1" runat="server"  />
      <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"
            AuthorizationFilter="user" />
          <asp:Calendar ID="Calendar1" runat="server"></asp:Calendar>
        </ZoneTemplate>
      </asp:WebPartZone>
      <hr />
      <asp:Literal ID="Literal1" runat="server"></asp:Literal>
    </div>
    </form>
</body>
</html>

El segundo paso consiste en invalidar el IsAuthorized(Type, String, String, Boolean) método y crear un control personalizado para los filtros de autorización. Tenga en cuenta que el código comprueba primero si la propiedad tiene un valor, de modo que cualquier control que no asigne la AuthorizationFilter propiedad se agregará automáticamente. Si un control tiene un filtro, el código solo devuelve true si el valor del filtro es igual a admin. Esto muestra un mecanismo sencillo que puede usar para mostrar determinados controles a determinados usuarios, en función de su rol. Aunque un ejemplo completo de uso de roles está fuera del ámbito de este tema, podría usar la misma lógica que el método invalidado en este ejemplo de código, salvo que podría comprobar si el usuario actual está en un rol que coincida con el valor del filtro de autorización y, a continuación, agregar el control solo para ese usuario. Esto le permitiría crear páginas en las que algunos usuarios verían todos los controles y otros usuarios solo verían controles seleccionados. Así es como la lógica que comprueba el filtro podría tener un aspecto si usó roles:

If Roles.IsUserInRole(Page.User.Identity.Name, authorizationFilter) Then  
  return True  
Else  
  return False  
End If  
if(Roles.IsUserInRole(Page.User.Identity.Name, authorizationFilter))  
    return true;  
else  
    return false;  

Para que se ejecute el ejemplo de código, debe compilar este código fuente. Puede compilarlo explícitamente y colocar el ensamblado resultante en la carpeta Bin del sitio web o en la caché global de ensamblados. Como alternativa, puede colocar el código fuente en la carpeta App_Code del sitio, donde se compilará dinámicamente en tiempo de ejecución. En este ejemplo de código se usa el método de compilación dinámico. Para ver un tutorial que muestra cómo compilar, consulte Tutorial: Desarrollo y uso de un control de servidor web personalizado.

using System;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace Samples.AspNet.CS.Controls
{
  public class MyManagerAuthorize : WebPartManager
  {
    public override bool IsAuthorized(Type type, string path, string authorizationFilter, bool isShared)
    {
      if (!String.IsNullOrEmpty(authorizationFilter))
      {
        if (authorizationFilter == "admin")
          return true;
        else
          return false;
      }
      else
            {
                return true;
            }
        }
  }
}
Imports System.Web
Imports System.Web.Security
Imports System.Security.Permissions
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts

Namespace Samples.AspNet.VB.Controls

  <AspNetHostingPermission(SecurityAction.Demand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  <AspNetHostingPermission(SecurityAction.InheritanceDemand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  Public Class MyManagerAuthorize
    Inherits WebPartManager

    Public Overrides Function IsAuthorized(ByVal type As Type, _
      ByVal path As String, ByVal authorizationFilter As String, _
      ByVal isShared As Boolean) As Boolean

      If Not String.IsNullOrEmpty(authorizationFilter) Then
        If authorizationFilter = "admin" Then
          Return True
        Else
          Return False
        End If
      Else
        Return True
      End If

    End Function

  End Class

End Namespace

Después de cargar la página en un explorador, tenga en cuenta que se muestra el primer control, ya que coincide con los criterios del método invalidado. El segundo control no se agrega a la página, porque se excluye su valor de filtro. Se agrega el tercer control, porque no tiene su AuthorizationFilter propiedad establecida. Si cambia el valor de propiedad en el segundo control para que coincida con el del primer control y, a continuación, vuelva a ejecutar la página, también se agregará el segundo control.

Comentarios

El IsAuthorized(Type, String, String, Boolean) método de sobrecarga lleva a cabo los pasos finales para determinar si un control está autorizado para agregarse a una página. El método garantiza que type es un tipo válido y que path tiene un valor solo si el control que se comprueba es un control de usuario. A continuación, llama al método crítico OnAuthorizeWebPart , que genera el AuthorizeWebPart evento.

Notas a los desarrolladores de herederos

Este método se puede invalidar heredando de la WebPartManager clase si desea proporcionar un control adicional al comprobar la autorización. Es posible que desee invalidar el método para comprobar ciertos valores en el authorizationFilter parámetro y, en función del valor, devuelva un valor booleano que determine si el control se agregará a una página.

Para los desarrolladores de páginas que también desean comprobar los filtros de autorización y proporcionar control personalizado, hay una opción para hacerlo en línea en una página .aspx o en un archivo de código subyacente, sin tener que heredar de ninguna clase. Puede declarar un controlador de eventos alternativo en la página para el OnAuthorizeWebPart(WebPartAuthorizationEventArgs) método del WebPartManager control. Para obtener más detalles y un ejemplo, consulte el OnAuthorizeWebPart(WebPartAuthorizationEventArgs) método .

Consulte también

Se aplica a