WebPartManager.IsAuthorized Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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 está autorizado, o conjunto de controle de Web Parts pode responder de várias maneiras, dependendo do contexto. O conjunto de controles pode silenciosamente falhar ao adicionar uma parte não autorizada (se não houver necessidade de informar o usuário), ele 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 planeja 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, pois se eles são colocados em WebPartZoneBase zonas, esses controles são encapsulados com um GenericWebPart controle em tempo de execução e esse controle herda 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 verificar 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 obter 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 eles não fazem 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 seu site ou no cache de assembly global. Como alternativa, você pode colocar o código-fonte na pasta App_Code do site, em que 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, nesse caso, 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 true
como , 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 ele é excluído pelo filtro. O terceiro controle também é adicionado, pois ele 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 conjunto de controle de Web Parts para verificar a autorização de 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
- AuthorizationFilter
- AuthorizeWebPart
- OnAuthorizeWebPart(WebPartAuthorizationEventArgs)
- controles de Web Parts ASP.NET
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
- 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 de uso de 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 verificar se o usuário atual está em uma função que corresponde 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 a aparência do filtro 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 seu site ou no cache de assembly global. Como alternativa, você pode colocar o código-fonte na pasta App_Code do site, em que 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 ele 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 gera 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 verificar 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 verificar 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
- AuthorizationFilter
- AuthorizeWebPart
- OnAuthorizeWebPart(WebPartAuthorizationEventArgs)
- controles de Web Parts ASP.NET