共用方式為


WebPartManager.OnAuthorizeWebPart(WebPartAuthorizationEventArgs) 方法

定義

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

備註

當控件正在檢查要新增至頁面的授權時WebPart,方法OnAuthorizeWebPart會呼叫 IsAuthorized 方法。 OnAuthorizeWebPart呼叫 方法時,它會引發 AuthorizeWebPart 事件,如果事件有處理程式方法,則會叫用 處理程式。

授權 WebPart 控件的程式是重要的網頁元件功能。 控件新增至區域WebPartManager的每個WebPart或伺服器控制項都會通過授權程式,以判斷是否可以新增控件。 根據預設,網頁元件控件集不會提供任何篩選準則,以防止控件新增至區域。 但是,控件集確實會提供開發人員建立自己的篩選準則所需的機制。 藉由使用這些機制,您可以建立自定義篩選案例。 例如,您可以建立篩選條件,如此一來,如果使用者處於系統管理員角色,則會在轉譯頁面時將特定控件新增至區域,而且如果使用者處於使用者角色,則不會新增這些控件。

在授權程式期間篩選控制件的機制是AuthorizationFilter控制件、IsAuthorizedOnAuthorizeWebPart 方法上的屬性WebPart,以及 AuthorizeWebPart 控制項上的 WebPartManager 事件。

若要建立篩選案例,基本上有兩個工作。 首先,您會將字串指派給 AuthorizationFilter 您想要篩選之每個 WebPart 控件的 屬性。 這些字串值可以是任意值,但應該包含您想要篩選的準則。 例如,如果您想要只有在系統管理員使用者正在檢視頁面時,才將指定的控件新增至區域,則可以將的 admin 字串值指派給 屬性。 然後您可以使用 ASP.NET 角色功能,並將您網站的所有使用者新增至各種角色,例如系統管理員、管理員和使用者。 載入頁面時,您的篩選程式代碼會檢查使用者所在的角色、將它與所檢查控件上的授權篩選值進行比較,以及 (例如,) 使用者是系統管理員角色,而且您已將控件 AuthorizationFilter 的值設定為 admin,則可以新增控件。

建立篩選案例的第二個步驟是撰寫程式代碼來檢查 AuthorizationFilter 控件上的 WebPart 屬性值,並判斷是否在將每個控件新增至其區域之前獲得授權。 有兩個選項可用來放置此篩選程序代碼。 第一個選項是頁面開發人員慣用的選項。 您可以建立方法,直接在網頁伺服器腳本程式代碼或程式代碼分隔檔案中處理 AuthorizeWebPart 事件。 藉由將 屬性新增 OnAuthorizeWebPart 至頁面中控件的標記 WebPartManager ,將方法與 事件產生關聯,如下列範例標記程式代碼所示。

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

您所有自定義方法都必須檢查每個 WebPart 控件是否有篩選準則,然後根據結果,將布爾值指派給 IsAuthorized 對象的屬性 WebPartAuthorizationEventArgs ,以指出是否可以 WebPart 新增控件。 範例一節中的程式代碼示範如何執行這項操作。

放置篩選程序代碼之位置的第二個選項是繼承自 WebPartManager 類別,並覆寫方法來檢查篩選準則。 您可以覆寫以執行這項作業的兩種方法是 WebPartManager.IsAuthorized(Type, String, String, Boolean) 方法或 OnAuthorizeWebPart 方法。 雖然任一方法都可行,但大部分情況下最好覆寫 IsAuthorized 方法,因為它會提供您更強大的程式設計控制整個授權程式,而 OnAuthorizeWebPart 方法只會執行一個特定的工作,也就是引發 事件並檢查處理程式。 如需覆寫 IsAuthorized 方法之自定義WebPartManager類別的程式代碼範例,請參閱 WebPartManager.IsAuthorized(Type, String, String, Boolean) 方法的多載。

適用於

另請參閱