WebPartManager.OnAuthorizeWebPart(WebPartAuthorizationEventArgs) Método

Definição

Aciona o evento AuthorizeWebPart e invoca um manipulador para o evento, se houver.

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

Exemplos

O exemplo de código a seguir demonstra como definir um manipulador de eventos personalizado para o AuthorizeWebPart evento, para que o manipulador possa fornecer código de filtragem personalizado para o OnAuthorizeWebPart método . Este exemplo seria uma maneira típica de um desenvolvedor de página fornecer um cenário de filtragem e autorização de WebPart controles a serem adicionados a uma página.

Na página da Web, observe que o <asp:webpartmanager> elemento tem o OnAuthorizeWebPart atributo com o nome do manipulador de eventos atribuído a ele. O método verifica se os controles na página têm seus respectivos AuthorizationFilter valores de propriedade definidos como admin e, nesse caso, retorna true, o que significa que eles serão autorizados e adicionados à página.

Observação

Observe que os controles que não têm nenhum valor atribuído à AuthorizationFilter propriedade também são adicionados, pois supõe-se que eles não fazem parte de um cenário de filtragem. Essa seria uma abordagem comum em um cenário de filtragem: alguns controles seriam filtrados e outros não estariam, pois presume-se que estejam disponíveis para todos os usuários.

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

Como a configuração de usuários em funções está além do escopo deste tópico, este exemplo de código não marcar funções de usuário na filtragem. No entanto, o cenário de filtragem de controles de acordo com as funções de usuário provavelmente será um dos usos mais comuns desse recurso de filtragem. Se você tiver funções em seu site e quiser marcar funções de usuário nesse método para filtrar controles, o método será semelhante ao bloco de código a seguir (em comparação com a abordagem mais simples no exemplo de código anterior, que não usa funções).

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;  
  }  
}  

Comentários

O OnAuthorizeWebPart método é chamado pelo IsAuthorized método , quando um WebPart controle está sendo verificado para que a autorização seja adicionada a uma página. Quando o OnAuthorizeWebPart método é chamado, ele aciona o AuthorizeWebPart evento e, se houver um método de manipulador para o evento, ele invocará o manipulador.

O processo de autorização WebPart de controles é um recurso importante de Web Parts. Cada WebPart controle de servidor ou adicionado a uma zona pelo controle passa por WebPartManager um processo de autorização para determinar se o controle pode ser adicionado. Por padrão, o conjunto de controle de Web Parts não fornece critérios de filtragem para impedir que controles sejam adicionados a uma zona. Mas o conjunto de controle fornece os mecanismos necessários para que os desenvolvedores criem seus próprios critérios de filtragem. Usando esses mecanismos, você pode criar cenários de filtragem personalizados. Por exemplo, você pode criar um filtro para que, se um usuário estiver em uma função de administrador, determinados controles sejam adicionados a uma zona quando a página for renderizada e, se o usuário estiver em uma função de usuário, esses controles não serão adicionados.

Os mecanismos para filtrar controles durante o processo de autorização são a AuthorizationFilter propriedade em WebPart controles, nos IsAuthorized métodos e OnAuthorizeWebPart e no AuthorizeWebPart evento no WebPartManager controle.

Para criar um cenário de filtragem, há essencialmente duas tarefas. Primeiro, você atribui cadeias de caracteres à AuthorizationFilter propriedade de cada WebPart controle que deseja filtrar. Esses valores de cadeia de caracteres podem ser arbitrários, mas devem conter os critérios nos quais você deseja filtrar. Por exemplo, se você quiser que um determinado controle seja adicionado a uma zona somente se um usuário administrador estiver exibindo a página, você poderá atribuir um valor de cadeia de caracteres à admin propriedade . Em seguida, você pode usar o recurso ASP.NET funções e adicionar todos os usuários do seu site a várias funções, como administrador, gerente e usuário. Quando uma página está carregando, seu código de filtragem marcar em qual função um usuário está, compare-o com o valor do filtro de autorização em um controle que está sendo verificado e se (por exemplo) o usuário estiver em uma função de administrador e você tiver definido o valor do AuthorizationFilter controle como admin, o controle poderá ser adicionado.

A segunda etapa na criação de um cenário de filtragem é gravar código para marcar os valores de AuthorizationFilter propriedade em WebPart controles e determinar se cada controle é autorizado antes de ser adicionado à sua zona. Há duas opções para onde colocar esse código de filtragem. A primeira opção é a opção preferencial para desenvolvedores de página. Você pode criar um método para manipular o AuthorizeWebPart evento diretamente no código de script do servidor de página da Web ou em um arquivo de separação de código. Associe seu método ao evento adicionando o OnAuthorizeWebPart atributo à marca para o WebPartManager controle na página, conforme mostrado no código de marcação de exemplo a seguir.

<asp:webpartmanager id="manager1" runat="server"   
   OnAuthorizeWebPart="manager1_AuthorizeWebPart" />  

Tudo o que seu método personalizado precisa fazer é marcar cada WebPart controle para os critérios de filtragem e, com base nos resultados, atribuir um valor booliano à IsAuthorized propriedade do WebPartAuthorizationEventArgs objeto para indicar se o WebPart controle pode ser adicionado. O código na seção Exemplo demonstra como fazer isso.

A segunda opção para onde colocar o código de filtragem é herdar da WebPartManager classe e substituir um método para marcar os critérios de filtro. Os dois métodos que você pode substituir para fazer isso são o WebPartManager.IsAuthorized(Type, String, String, Boolean) método ou o OnAuthorizeWebPart método . Embora qualquer um dos métodos funcione, na maioria dos casos é preferível substituir o IsAuthorized método, pois ele fornece maior controle programático sobre todo o processo de autorização, enquanto o OnAuthorizeWebPart método faz apenas uma tarefa específica, que é gerar o evento e marcar para um manipulador. Para obter um exemplo de código de uma classe personalizada WebPartManager que substitui o IsAuthorized método , consulte a WebPartManager.IsAuthorized(Type, String, String, Boolean) sobrecarga do método .

Aplica-se a

Confira também