WebPartManager.OnAuthorizeWebPart(WebPartAuthorizationEventArgs) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
引发 AuthorizeWebPart 事件并调用该事件的处理程序(如果存在)。
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)
参数
示例
下面的代码示例演示如何为 AuthorizeWebPart 事件设置自定义事件处理程序,以便处理程序可以为 方法提供自定义筛选代码 OnAuthorizeWebPart 。 此示例是页面开发人员提供筛选方案和要添加到页面的控件授权 WebPart 的典型方法。
在网页中,请注意 元素 <asp:webpartmanager>
具有 OnAuthorizeWebPart
属性,并具有分配给它的事件处理程序的名称。 方法检查页面上的控件是否将其各自的 AuthorizationFilter 属性值设置为 admin
,如果设置为 ,则返回 true
,这意味着它们将被授权并添加到页面。
注意
请注意,未将任何值分配给 AuthorizationFilter 属性的控件也会添加,因为它们被假定不是筛选方案的一部分。 这是筛选方案中的一种常见方法:某些控件将被筛选,而其他控件则不会筛选,因为它们假定可供所有用户使用。
<%@ 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>
由于在角色中设置用户超出了本主题的范围,因此此代码示例不检查筛选中的用户角色。 但是,根据用户角色筛选控件的方案可能是此筛选功能的最常见用途之一。 如果站点上有角色,并且想要在此方法中检查用户角色以筛选控件,则该方法类似于以下代码块 (,而不是前面的代码示例中更简单的方法,该方法不使用角色) 。
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;
}
}
注解
当OnAuthorizeWebPart检查控件以将授权添加到页面时WebPart,方法将调用 IsAuthorized 该方法。 OnAuthorizeWebPart调用 方法时,它会引发 AuthorizeWebPart 事件,如果事件有处理程序方法,则调用 处理程序。
授权 WebPart 控件的过程是一项重要的 Web 部件功能。 控件WebPartManager添加到区域的每个WebPart或服务器控件都经过授权过程,以确定是否可以添加该控件。 默认情况下,Web 部件控件集不提供任何筛选条件来阻止控件添加到区域。 但控件集确实为开发人员提供了创建自己的筛选条件所需的机制。 通过使用这些机制,可以创建自定义筛选方案。 例如,可以创建一个筛选器,以便如果用户是管理员角色,则某些控件会在呈现页面时添加到区域中,并且如果用户处于用户角色,则不会添加这些控件。
在授权过程中筛选控件的机制是 AuthorizationFilter 控件上的 WebPart 属性、 IsAuthorized 和 OnAuthorizeWebPart 方法以及 AuthorizeWebPart 控件上的 WebPartManager 事件。
若要创建筛选方案,基本上有两个任务。 首先,将字符串 AuthorizationFilter 分配给要筛选的每个 WebPart 控件的 属性。 这些字符串值可以是任意的,但它们应包含要筛选的条件。 例如,如果仅当管理员用户正在查看页面时,才希望将给定控件添加到区域,则可以将 字符串值 admin
分配给 属性。 然后,可以使用 ASP.NET 角色功能,并将站点的所有用户添加到各种角色,例如管理员、经理和用户。 加载页面时,筛选代码将检查用户所扮演的角色,将其与正在检查的控件上的授权筛选器值进行比较,如果 (例如,) 用户处于管理员角色,并且你已将控件 AuthorizationFilter 的值设置为 admin
,则可以添加控件。
创建筛选方案的第二步是编写代码来检查控件上的AuthorizationFilterWebPart属性值,并确定每个控件在添加到其区域之前是否获得授权。 有两个选项用于放置此筛选代码的位置。 第一个选项是页面开发人员的首选选项。 可以创建一个方法来直接在网页服务器脚本代码或代码分离文件中处理 AuthorizeWebPart 事件。 通过将 属性添加到 OnAuthorizeWebPart
页面中控件的 WebPartManager 标记,将方法与 事件相关联,如以下示例标记代码所示。
<asp:webpartmanager id="manager1" runat="server"
OnAuthorizeWebPart="manager1_AuthorizeWebPart" />
自定义方法所要做的就是检查每个WebPart控件的筛选条件,然后根据结果向 对象的 属性WebPartAuthorizationEventArgs分配一个布尔值IsAuthorized,以指示是否可以添加控件WebPart。 示例部分中的代码演示了如何执行此操作。
用于放置筛选代码的第二个选项是从 类继承 WebPartManager ,并重写方法来检查筛选条件。 为此,可以替代的两种方法是 WebPartManager.IsAuthorized(Type, String, String, Boolean) 方法或 OnAuthorizeWebPart 方法。 尽管任一方法都行得当,但在大多数情况下,最好重写 IsAuthorized 方法,因为它可让你对整个授权过程进行更大的编程控制,而 OnAuthorizeWebPart 该方法只执行一个特定任务,即引发 事件并检查处理程序。 有关替代 IsAuthorized 方法的自定义WebPartManager类的代码示例,请参阅 WebPartManager.IsAuthorized(Type, String, String, Boolean) 方法的重载。