WebPartManager.IsAuthorized Método

Definição

Determina se um WebPart ou outro controlo de servidor pode ser adicionado a uma página.

Sobrecargas

Name Description
IsAuthorized(WebPart)

Realiza os passos iniciais para determinar se um controlo está autorizado a ser adicionado a uma página.

IsAuthorized(Type, String, String, Boolean)

Realiza os passos finais para determinar se um controlo está autorizado a ser adicionado a uma página.

Observações

Parte da flexibilidade da funcionalidade Web Parts é a capacidade de adicionar controlos de servidor às páginas Web em tempo de execução. Existem vários cenários comuns em que pode ser adicionado um controlo de servidor (que pode ser um controlo personalizado WebPart, um controlo personalizado de servidor, um controlo de utilizador ou um controlo ASP.NET).

Nos seguintes cenários comuns, o conjunto de controlos Web Parts tenta adicionar controlos de servidor a uma página, e o IsAuthorized método é chamado para os autorizar:

  • Quando um controlo de servidor é adicionado ao declará-lo na marcação de uma página Web dentro de uma WebPartZoneBase zona.

  • Quando um controlo de servidor é adicionado programaticamente a uma zona.

  • Quando um utilizador importa um controlo de servidor para um catálogo de Web Parts de controlos.

  • Quando um controlo de servidor existente é carregado a partir do armazenamento de dados de personalização.

  • Quando um controlo de servidor é adicionado a um DeclarativeCatalogPart controlo para o tornar disponível num catálogo de controlos de servidor.

Em cada cenário em que são adicionados controlos, o IsAuthorized método é chamado para garantir que todos os critérios de autorização foram cumpridos para permitir a adição de um controlo. Quando um controlo é autorizado, este é adicionado normalmente, como aconteceria se não existisse um cenário de filtragem. Quando um controlo não é autorizado, o conjunto de controlos Web Parts pode responder de várias formas, dependendo do contexto. O conjunto de controlo pode falhar silenciosamente em adicionar uma parte não autorizada (se não houver necessidade de informar o utilizador), pode mostrar uma mensagem de erro ou pode adicionar uma instância da UnauthorizedWebPart classe como marcador de lugar. Este objeto provisório não é visível na página, mas é visível no código-fonte da página para indicar que um controlo não autorizado foi excluído.

O determinante de se um controlo é autorizado é o filtro de autorização. Um filtro de autorização é uma funcionalidade no conjunto de controlos Web Parts que permite aos programadores excluir de uma página quaisquer controlos que não cumpram os critérios especificados.

Para criar um cenário de filtragem, os programadores têm de fazer duas coisas. Primeiro, devem atribuir um valor de cadeia (o valor pode ser arbitrário) à AuthorizationFilter propriedade de cada WebPart controlo que planeiam usar no cenário. Também podem atribuir um valor a esta propriedade para outros tipos de controlos de servidor que não WebPart são controlos, porque se forem colocados em WebPartZoneBase zonas, esses controlos são encapsulados com um GenericWebPart controlo em tempo de execução, e esse controlo herda a AuthorizationFilter propriedade.

O segundo passo necessário para criar um cenário de filtragem é ou sobrescrever o IsAuthorized(Type, String, String, Boolean) método ou criar um gestor de eventos para o AuthorizeWebPart evento. Nestes métodos, um promotor pode verificar a AuthorizationFilter propriedade e, se o valor indicar que o controlo não deve ser autorizado, o promotor garante que o IsAuthorized método devolve um valor de false.

Note

Para exemplos de código e uma descrição de como configurar um cenário de filtragem personalizado usando o IsAuthorized método, consulte os tópicos para as sobrecargas do método.

IsAuthorized(WebPart)

Realiza os passos iniciais para determinar se um controlo está autorizado a ser adicionado a uma 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

A WebPart ou outro controlo de servidor a ser verificado para autorização.

Devoluções

Um valor booleano que indica se webPart pode ser adicionado a uma página.

Exceções

webPart é null.

Exemplos

O exemplo de código seguinte demonstra como chamar o IsAuthorized(WebPart) método a partir do seu código para determinar se um controlo está autorizado a ser adicionado a uma página.

O exemplo de código tem três partes:

  • Um controlo personalizado WebPartManager que sobrepõe o IsAuthorized método.

  • Uma página Web que cria um filtro para um WebPart controlo.

  • Uma explicação de como executar o exemplo do código.

Este exemplo de código utiliza um controlo personalizado WebPartManager que sobrepõe o IsAuthorized(Type, String, String, Boolean) método de sobrecarga para fornecer um tratamento personalizado da AuthorizationFilter propriedade. Este controlo verifica o valor de uma propriedade e admin , se o valor estiver presente, autoriza o controlo. Se um controlo tiver um valor diferente, não é autorizado; Controlos sem o valor da propriedade também são autorizados, pois presume-se que não fazem parte do cenário de filtragem.

Para que este exemplo de código seja executado, deve compilar este código-fonte. Pode compilar explicitamente e colocar o assembly resultante na pasta Bin do seu site ou na cache global assembly. Alternativamente, pode colocar o código-fonte na pasta App_Code do seu site, onde será compilado dinamicamente em tempo de execução. Este exemplo de código utiliza o método de compilação dinâmica. Para um guia que demonstra como compilar, consulte Guia: Desenvolvimento e Utilização de um Controlo 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

A segunda parte do exemplo de código cria um filtro que pode potencialmente excluir um controlo. A página Web seguinte contém três controlos de servidor ASP.NET num elemento <asp:webpartzone>. Note que o primeiro e o segundo controlos têm as suas AuthorizationFilter propriedades definidas com valores diferentes, e o terceiro não atribui essa propriedade. Este valor de autorização pode ser verificado em tempo de execução, e o controlo pode ser adicionado à página se o filtro corresponder aos critérios definidos pelo programador. Note também que, no Page_Load método, o código chama o IsAuthorized(WebPart) método para determinar se cada um dos controlos está autorizado e, em caso afirmativo, define a propriedade de ExportMode cada controlo.

<%@ 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>

Note que, para o exemplo de código funcionar, deve adicionar uma definição no ficheiro Web.config para permitir a exportação de ficheiros de descrição de Web Parts. Certifique-se de que tem um ficheiro Web.config no mesmo diretório da página Web para este exemplo de código. Dentro da <system.web> secção, certifique-se de que existe um <webParts> elemento com um enableExport atributo definido como true, como na marcação seguinte.

<webParts enableExport="true">

...

</webParts>

Depois de carregar a página num navegador, note que o primeiro controlo é exibido, porque corresponde aos critérios do método sobreposto. O segundo controlo não é adicionado à página, porque é excluído pelo filtro. O terceiro controlo também é adicionado, porque não tem a sua AuthorizationFilter propriedade definida. Repare que, se clicar no ícone do menu verbos na barra de título de qualquer um dos controlos, ambos podem ser exportados porque os respetivos ExportMode valores de propriedade foram atribuídos.

Observações

O IsAuthorized método é o método inicial chamado pelo conjunto de controlos Web Parts para verificar a autorização de um WebPart controlo. Aceita webPart como parâmetro e inicia um processo que determina, em última análise, se o controlo será adicionado a uma página. Chame este método diretamente do seu código quando precisar de determinar se um determinado controlo está autorizado.

Este método executa as tarefas iniciais de determinar se o controlo herda da WebPart classe ou é um GenericWebPart controlo e, em caso afirmativo, que tipo de controlo filho contém. Para concluir a tarefa de autorização, chama o IsAuthorized(Type, String, String, Boolean) método de sobrecarga.

Notas para Chamadores

Este método é chamado diretamente do seu código. Se quiser obter maior controlo programático sobre o processo de autorização, pode sobrepor o IsAuthorized(Type, String, String, Boolean) método de sobrecarga.

Ver também

Aplica-se a

IsAuthorized(Type, String, String, Boolean)

Realiza os passos finais para determinar se um controlo está autorizado a ser adicionado a uma 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

O Type controlo que está a ser verificado para autorização.

path
String

O caminho relativo da aplicação para o ficheiro fonte do controlo a ser autorizado, se o controlo for um controlo de utilizador.

authorizationFilter
String

Um valor arbitrário de cadeia atribuído à AuthorizationFilter propriedade de um WebPart controlo, usado para autorizar se um controlo pode ser adicionado a uma página.

isShared
Boolean

Indica se o controlo verificado para autorização é um controlo partilhado, o que significa que é visível para muitos ou todos os utilizadores da aplicação, e o seu IsShared valor de propriedade é definido para true.

Devoluções

Um valor booleano que indica se um controlo está autorizado a ser adicionado a uma página.

Exceções

type é null.

type é um controlo de utilizador, e path é ou null uma cadeia vazia ("").

-ou-

type não é um controlo de utilizador, e path tem um valor atribuído.

Exemplos

O exemplo de código seguinte demonstra como sobrescrever o IsAuthorized método para determinar se um controlo está autorizado a ser adicionado a uma página.

O primeiro passo é criar um filtro que possa potencialmente excluir um controlo. A página Web seguinte contém três controlos de servidor ASP.NET num elemento <asp:webpartzone>. Note que o primeiro e o segundo controlos têm as suas AuthorizationFilter propriedades definidas com valores diferentes, e o terceiro não atribui essa propriedade. Este valor de autorização pode ser verificado em tempo de execução, e o controlo pode ser adicionado à página se o filtro corresponder aos critérios definidos pelo programador.

<%@ 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>

O segundo passo é sobrepor o IsAuthorized(Type, String, String, Boolean) método e criar tratamento personalizado para filtros de autorização. Note-se que o código verifica primeiro se a propriedade tem um valor, de modo que qualquer controlo que não atribua a AuthorizationFilter propriedade será adicionado automaticamente. Se um controlo tiver um filtro, o código retorna true apenas se o valor do filtro for igual a admin. Isto demonstra um mecanismo simples que pode usar para mostrar certos controlos a determinados utilizadores, dependendo do seu papel. Embora um exemplo completo usando papéis esteja fora do âmbito deste tópico, poderia usar a mesma lógica do método sobreposto neste exemplo de código, exceto que poderia verificar se o utilizador atual está numa função que corresponde ao valor do filtro de autorização, e depois adicionar o controlo apenas para esse utilizador. Isto permitiria criar páginas onde alguns utilizadores veriam todos os controlos, e outros apenas os controlos selecionados. É assim que a lógica que verifica o filtro pode parecer se usasse papéis:

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 o exemplo de código seja executado, tens de compilar este código-fonte. Pode compilar explicitamente e colocar o assembly resultante na pasta Bin do seu site ou na cache global assembly. Alternativamente, pode colocar o código-fonte na pasta App_Code do seu site, onde será compilado dinamicamente em tempo de execução. Este exemplo de código utiliza o método de compilação dinâmica. Para um guia que demonstra como compilar, consulte Guia: Desenvolvimento e Utilização de um Controlo 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

Depois de carregar a página num navegador, note que o primeiro controlo é exibido, porque corresponde aos critérios do método sobreposto. O segundo controlo não é adicionado à página, porque o seu valor de filtro é excluído. O terceiro controlo é adicionado, porque não tem a sua AuthorizationFilter propriedade definida. Se alterar o valor da propriedade no segundo controlo para corresponder ao do primeiro controlo, e depois executar a página novamente, o segundo controlo também é adicionado.

Observações

O IsAuthorized(Type, String, String, Boolean) método de sobrecarga executa os passos finais para determinar se um controlo está autorizado a ser adicionado a uma página. O método garante que type é um tipo válido, e que path só tem valor se o controlo verificado for de utilizador. Depois chama o método crítico OnAuthorizeWebPart , que eleva o AuthorizeWebPart evento.

Notas para Herdeiros

Este método pode ser ultrapassado ao herdar da WebPartManager classe, se quiser fornecer tratamento adicional ao verificar a autorização. Pode querer sobrescrever o método para verificar certos valores no authorizationFilter parâmetro e, com base no valor, devolver um valor booleano que determine se o controlo será adicionado a uma página.

Para os programadores de páginas que também querem verificar filtros de autorização e fornecer tratamento personalizado, existe uma opção para fazer isto inline numa página .aspx, ou num ficheiro code-behind, sem ter de herdar de nenhuma classe. Podes declarar um gestor de eventos alternativo na página para o OnAuthorizeWebPart(WebPartAuthorizationEventArgs) método do WebPartManager controlo. Para mais detalhes e um exemplo, consulte o OnAuthorizeWebPart(WebPartAuthorizationEventArgs) método.

Ver também

Aplica-se a