WebPartManager.OnAuthorizeWebPart(WebPartAuthorizationEventArgs) Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Eleva o AuthorizeWebPart evento e invoca um handler para o evento, se existir um.
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
A que contém dados de WebPartAuthorizationEventArgs eventos.
Exemplos
O exemplo de código seguinte demonstra como definir um gestor 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 forma típica de um programador de páginas fornecer um cenário de filtragem e autorização para WebPart adicionar controlos a uma página.
Na página Web, repare que o <asp:webpartmanager> elemento tem o OnAuthorizeWebPart atributo com o nome do gestor de eventos atribuído. O método verifica se os controlos na página têm os respetivos AuthorizationFilter valores de propriedade definidos como admin e, em caso afirmativo, devolve true, o que significa que serão autorizados e adicionados à página.
Note
Note-se que controlos que não têm qualquer valor atribuído à AuthorizationFilter propriedade também são adicionados, porque se assume que não fazem parte de um cenário de filtragem. Esta seria uma abordagem comum num cenário de filtragem: alguns controlos seriam filtrados e outros não, porque se presume que estejam disponíveis para todos os utilizadores.
<%@ 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 configurar utilizadores em funções está fora do âmbito deste tópico, este exemplo de código não verifica os papéis dos utilizadores no filtro. No entanto, o cenário de filtrar os controlos de acordo com os papéis do utilizador é provavelmente uma das utilizações mais comuns desta funcionalidade de filtragem. Se tiver papéis no seu site e quiser verificar os papéis dos utilizadores neste método para filtrar os controlos, o método assemelhar-se-á ao seguinte bloco de código (ao contrário da abordagem mais simples do exemplo de código anterior, que não usa papéis).
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;
}
}
Observações
O OnAuthorizeWebPart método é chamado pelo IsAuthorized método quando um WebPart controlo está a ser verificado para autorização a ser adicionada a uma página. Quando o OnAuthorizeWebPart método é chamado, ele levanta o AuthorizeWebPart evento, e se existir um método handler para o evento, ele invoca o handler.
O processo de autorização WebPart de controlos é uma funcionalidade importante das Web Parts. Cada WebPart controlo ou servidor que é adicionado a uma zona pelo WebPartManager controlo passa por um processo de autorização para determinar se o controlo pode ser adicionado. Por defeito, o conjunto de controlos Web Parts não fornece quaisquer critérios de filtragem para impedir que controlos sejam adicionados a uma zona. Mas o conjunto de controlo fornece os mecanismos necessários para que os programadores criem os seus próprios critérios de filtragem. Ao usar estes mecanismos, pode criar cenários de filtragem personalizados. Por exemplo, poderia criar um filtro para que, se um utilizador estiver num papel de administrador, certos controlos seriam adicionados a uma zona quando a página for renderizada, e se o utilizador estiver num papel de utilizador, esses controlos não seriam adicionados.
Os mecanismos para filtrar controlos durante o processo de autorização são a AuthorizationFilter propriedade sobre WebPart controlos, os IsAuthorized métodos e OnAuthorizeWebPart e AuthorizeWebPart o evento sobre o WebPartManager controlo.
Para criar um cenário de filtragem, existem essencialmente duas tarefas. Primeiro, atribuis cadeias à AuthorizationFilter propriedade de cada WebPart controlo que queres filtrar. Estes valores de string podem ser arbitrários, mas devem conter os critérios que pretende filtrar. Por exemplo, se quiser que um determinado controlo seja adicionado a uma zona apenas se um utilizador administrador estiver a visualizar a página, então pode atribuir um valor de cadeia de admin à propriedade. Depois pode usar a funcionalidade de funções ASP.NET e adicionar todos os utilizadores do seu site a várias funções, como administrador, gestor e utilizador. Quando uma página está a carregar, o seu código de filtragem verifica qual o papel em que o utilizador está, compara-o com o valor do filtro de autorização num controlo que está a ser verificado, e se (por exemplo) o utilizador estiver num papel de administrador e tiver definido o valor do AuthorizationFilter controlo para admin, o controlo pode ser adicionado.
O segundo passo na criação de um cenário de filtragem é escrever código para verificar os AuthorizationFilter valores das propriedades nos WebPart controlos e determinar se cada controlo é autorizado antes de ser adicionado à sua zona. Existem duas opções para onde colocar este código de filtragem. A primeira opção é a preferida para programadores de páginas. Pode criar um método para gerir o AuthorizeWebPart evento diretamente no código do script do servidor da página Web, ou num ficheiro de separação de código. Associe o seu método ao evento adicionando o OnAuthorizeWebPart atributo à etiqueta do WebPartManager controlo na página, como mostrado no seguinte código de marcação de exemplo.
<asp:webpartmanager id="manager1" runat="server"
OnAuthorizeWebPart="manager1_AuthorizeWebPart" />
Tudo o que o seu método personalizado tem de fazer é verificar cada WebPart controlo para os critérios de filtragem e depois, com base nos resultados, atribuir um valor Booleano à IsAuthorized propriedade do WebPartAuthorizationEventArgs objeto para indicar se o WebPart controlo pode ser adicionado. O código na secção de Exemplo demonstra como fazer isto.
A segunda opção para onde colocar o seu código de filtragem é herdar da WebPartManager classe e sobrescrever um método para verificar os critérios do filtro. Os dois métodos que podes ultrapassar para fazer isto 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 sobrepor o IsAuthorized método, porque lhe proporciona maior controlo programático sobre todo o processo de autorização, enquanto o OnAuthorizeWebPart método realiza apenas uma tarefa específica, que é levantar o evento e verificar um handler. Para um exemplo de código de uma classe personalizada WebPartManager que sobrepõe o IsAuthorized método, veja a WebPartManager.IsAuthorized(Type, String, String, Boolean) sobrecarga do método.