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) 方法的多載。

適用於

另請參閱