WebPartManager.IsAuthorized Método

Definição

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

Sobrecargas

IsAuthorized(WebPart)

Realiza as etapas iniciais para determinar se um controle está autorizado a ser adicionado a uma página.

IsAuthorized(Type, String, String, Boolean)

Realiza as etapas finais para determinar se um controle está autorizado a ser adicionado a uma página.

Comentários

Parte da flexibilidade do recurso web parts é a capacidade de adicionar controles de servidor a páginas da Web em tempo de execução. Há vários cenários comuns em que um controle de servidor (que pode ser um controle personalizado WebPart , um controle de servidor personalizado, um controle de usuário ou um controle de ASP.NET) pode ser adicionado.

Nos seguintes cenários comuns, o conjunto de controle de Web Parts tenta adicionar controles de servidor a uma página e o IsAuthorized método é chamado para autorizá-los:

  • Quando um controle de servidor é adicionado declarando-o na marcação de uma página da Web dentro de uma WebPartZoneBase zona.

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

  • Quando um usuário importa um controle de servidor para um catálogo de controles de Web Parts.

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

  • Quando um controle de servidor é adicionado a um DeclarativeCatalogPart controle para disponibilizá-lo em um catálogo de controles de servidor.

Em cada cenário em que os controles são adicionados, o IsAuthorized método é chamado para garantir que todos os critérios de autorização tenham sido atendidos para permitir que um controle seja adicionado. Quando um controle é autorizado, ele é adicionado normalmente como seria se não houvesse nenhum cenário de filtragem. Quando um controle não é autorizado, o conjunto de controle de Web Parts pode responder de várias maneiras, dependendo do contexto. O conjunto de controles pode falhar silenciosamente ao adicionar uma parte não autorizada (se não houver necessidade de informar o usuário), pode exibir uma mensagem de erro ou pode adicionar uma instância da UnauthorizedWebPart classe como um espaço reservado. Esse objeto de espaço reservado não está visível na página, mas está visível no código-fonte da página para indicar que um controle não autorizado foi excluído.

O determinante de se um controle é autorizado é o filtro de autorização. Um filtro de autorização é um recurso no conjunto de controle de Web Parts que permite que os desenvolvedores excluam de uma página quaisquer controles que não atendam aos critérios especificados.

Para criar um cenário de filtragem, os desenvolvedores devem fazer duas coisas. Primeiro, eles devem atribuir um valor de cadeia de caracteres (o valor pode ser arbitrário) à AuthorizationFilter propriedade de cada WebPart controle que planejam usar no cenário. Eles também podem atribuir um valor a essa propriedade para outros tipos de controles de servidor que não WebPart são controles, porque se forem colocados em WebPartZoneBase zonas, esses controles serão encapsulados com um GenericWebPart controle em tempo de execução e esse controle herdará a AuthorizationFilter propriedade .

A segunda etapa necessária para criar um cenário de filtragem é substituir o IsAuthorized(Type, String, String, Boolean) método ou criar um manipulador de eventos para o AuthorizeWebPart evento. Nesses métodos, um desenvolvedor pode marcar a AuthorizationFilter propriedade e, se o valor indicar que o controle não deve ser autorizado, o desenvolvedor garante que o IsAuthorized método retorne um valor de false.

Observação

Para obter 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 as etapas iniciais para determinar se um controle 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

Um WebPart ou outro controle de servidor que está sendo verificado quanto à autorização.

Retornos

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

Exceções

webPart é null.

Exemplos

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

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

  • Um controle personalizado WebPartManager que substitui o IsAuthorized método .

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

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

Este exemplo de código usa um controle personalizado WebPartManager que substitui o IsAuthorized(Type, String, String, Boolean) método de sobrecarga para fornecer tratamento personalizado da AuthorizationFilter propriedade. Esse controle verifica se há um valor de propriedade de admin e, se o valor estiver presente, autoriza o controle. Se um controle tiver um valor diferente, ele não será autorizado; os controles sem o valor da propriedade também são autorizados, pois presume-se que não façam parte do cenário de filtragem.

Para que este exemplo de código seja executado, você deve compilar esse código-fonte. Você pode compilá-lo explicitamente e colocar o assembly resultante na pasta Bin do site ou no cache de assembly global. Como alternativa, você pode colocar o código-fonte na pasta App_Code do site, na qual ele será compilado dinamicamente em tempo de execução. Este exemplo de código usa o método de compilação dinâmica. Para obter um passo a passo que demonstra como compilar, consulte Passo a passo : desenvolvendo e usando um controle 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 controle . A página da Web a seguir contém três ASP.NET controles de servidor em um <asp:webpartzone> elemento . Observe que o primeiro e o segundo controles têm suas AuthorizationFilter propriedades definidas como valores diferentes e o terceiro não atribui a propriedade. Esse valor de autorização pode ser verificado em tempo de execução e o controle poderá ser adicionado à página se o filtro corresponder aos critérios definidos pelo desenvolvedor. Observe também que, no Page_Load método , o código chama o IsAuthorized(WebPart) método para determinar se cada um dos controles está autorizado e, em caso afirmativo, define a propriedade de ExportMode cada controle.

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

Observe que, para que o exemplo de código funcione, você deve adicionar uma configuração no arquivo Web.config para habilitar a exportação de arquivos de descrição de Web Parts. Verifique se você tem um arquivo Web.config no mesmo diretório que a página da Web para este exemplo de código. <system.web> Na seção , verifique se há um <webParts> elemento com um enableExport atributo definido truecomo , como na marcação a seguir.

<webParts enableExport="true">

...

</webParts>

Depois de carregar a página em um navegador, observe que o primeiro controle é exibido, pois ele corresponde aos critérios no método substituído. O segundo controle não é adicionado à página, pois é excluído pelo filtro. O terceiro controle também é adicionado, pois não tem sua AuthorizationFilter propriedade definida. Observe que, se você clicar no ícone de menu de verbos na barra de título de qualquer um dos controles, ambos poderão ser exportados porque seus respectivos ExportMode valores de propriedade foram atribuídos.

Comentários

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

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

Notas aos Chamadores

Esse método é chamado diretamente do seu código. Se você quiser obter maior controle programático sobre o processo de autorização, poderá substituir o IsAuthorized(Type, String, String, Boolean) método de sobrecarga.

Confira também

Aplica-se a

IsAuthorized(Type, String, String, Boolean)

Realiza as etapas finais para determinar se um controle 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 do controle que está sendo verificado quanto à autorização.

path
String

O caminho relativo de aplicativo para o arquivo de origem do controle que está sendo autorizado, se o controle é um controle de usuário.

authorizationFilter
String

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

isShared
Boolean

Indica se o controle que está sendo verificado quanto à autorização é um controle compartilhado, o que significa que ele é visível para muitos ou todos os usuários do aplicativo e o valor da propriedade IsShared é definido como true.

Retornos

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

Exceções

type é null.

type é um controle de usuário e path é null ou uma cadeia de caracteres vazia ("").

- ou -

type não é um controle de usuário e path tem um valor atribuído a ele.

Exemplos

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

A primeira etapa é criar um filtro que possa potencialmente excluir um controle. A página da Web a seguir contém três ASP.NET controles de servidor em um <asp:webpartzone> elemento . Observe que o primeiro e o segundo controles têm suas AuthorizationFilter propriedades definidas como valores diferentes e o terceiro não atribui a propriedade. Esse valor de autorização pode ser verificado em tempo de execução e o controle poderá ser adicionado à página se o filtro corresponder aos critérios definidos pelo desenvolvedor.

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

A segunda etapa é substituir o IsAuthorized(Type, String, String, Boolean) método e criar tratamento personalizado para filtros de autorização. Observe que o código primeiro verifica se a propriedade tem um valor, para que qualquer controle que não atribua a AuthorizationFilter propriedade seja adicionado automaticamente. Se um controle tiver um filtro, o código retornará true somente se o valor do filtro for igual a admin. Isso demonstra um mecanismo simples que você pode usar para exibir determinados controles para determinados usuários, dependendo de sua função. Embora um exemplo completo usando funções esteja além do escopo deste tópico, você pode usar a mesma lógica que o método substituído neste exemplo de código, exceto que você pode marcar se o usuário atual está em uma função que corresponda ao valor do filtro de autorização e, em seguida, adicionar o controle somente para esse usuário. Isso permitiria que você criasse páginas em que alguns usuários veriam todos os controles e outros usuários veriam apenas os controles selecionados. É assim que a lógica que verifica o filtro pode parecer se você usou funções:

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, você deve compilar esse código-fonte. Você pode compilá-lo explicitamente e colocar o assembly resultante na pasta Bin do site ou no cache de assembly global. Como alternativa, você pode colocar o código-fonte na pasta App_Code do site, na qual ele será compilado dinamicamente em tempo de execução. Este exemplo de código usa o método de compilação dinâmica. Para obter um passo a passo que demonstra como compilar, consulte Passo a passo : desenvolvendo e usando um controle 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 em um navegador, observe que o primeiro controle é exibido, pois ele corresponde aos critérios no método substituído. O segundo controle não é adicionado à página, pois seu valor de filtro é excluído. O terceiro controle é adicionado, pois não tem sua AuthorizationFilter propriedade definida. Se você alterar o valor da propriedade no segundo controle para corresponder ao do primeiro controle e, em seguida, executar a página novamente, o segundo controle também será adicionado.

Comentários

O IsAuthorized(Type, String, String, Boolean) método de sobrecarga executa as etapas finais para determinar se um controle está autorizado a ser adicionado a uma página. O método garante que type seja um tipo válido e que path tenha um valor somente se o controle que está sendo verificado for um controle de usuário. Em seguida, ele chama o método crítico OnAuthorizeWebPart , que aciona o AuthorizeWebPart evento.

Notas aos Herdeiros

Esse método pode ser substituído herdando da WebPartManager classe , se você quiser fornecer tratamento adicional ao verificar a autorização. Talvez você queira substituir o método para marcar para determinados valores no authorizationFilter parâmetro e, com base no valor , retornar um valor booliano que determina se o controle será adicionado a uma página.

Para desenvolvedores de páginas que também desejam marcar para filtros de autorização e fornecer tratamento personalizado, há uma opção para fazer isso embutido em uma página .aspx ou em um arquivo code-behind, sem precisar herdar de nenhuma classe. Você pode declarar um manipulador de eventos alternativo na página para o OnAuthorizeWebPart(WebPartAuthorizationEventArgs) método do WebPartManager controle . Para obter mais detalhes e um exemplo, consulte o OnAuthorizeWebPart(WebPartAuthorizationEventArgs) método .

Confira também

Aplica-se a