次の方法で共有


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)

パラメーター

e
WebPartAuthorizationEventArgs

イベント データを格納している WebPartAuthorizationEventArgs

次のコード例では、イベントのカスタム イベント ハンドラー AuthorizeWebPart を設定して、ハンドラーが メソッドのカスタム フィルター コードを提供できるようにする方法を OnAuthorizeWebPart 示します。 この例は、ページ開発者がフィルター処理シナリオと、ページに追加するコントロールの WebPart 承認を提供するための一般的な方法です。

Web ページで、 要素OnAuthorizeWebPart<asp:webpartmanager>イベント ハンドラーの名前が割り当てられた 属性があることに注意してください。 メソッドは、ページ上のコントロールのそれぞれの 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>

ロールでユーザーを設定することはこのトピックの範囲外であるため、このコード例ではフィルター処理でユーザー ロールを確認しません。 ただし、ユーザー ロールに従ってコントロールをフィルター処理するシナリオは、このフィルター処理機能の最も一般的な用途の 1 つである可能性があります。 サイトにロールがあり、このメソッドのユーザー ロールを確認してコントロールをフィルター処理する場合、メソッドは次のコード ブロックのようになります (前のコード例では、ロールを使用しない単純な方法に似ています)。

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 、コントロールがページに IsAuthorized 追加される承認をチェックするときに WebPart 、 メソッドによって呼び出されます。 メソッドが OnAuthorizeWebPart 呼び出されると、イベントが AuthorizeWebPart 発生し、イベントのハンドラー メソッドがある場合は、ハンドラーを呼び出します。

コントロールを承認する WebPart プロセスは、重要な Web パーツ機能です。 コントロールによってWebPartManagerゾーンに追加されるすべてのWebPartコントロールまたはサーバー コントロールは、承認プロセスを経て、コントロールを追加できるかどうかを判断します。 既定では、Web パーツ コントロール セットには、コントロールがゾーンに追加されないようにするためのフィルター条件は提供されません。 ただし、コントロール セットには、開発者が独自のフィルター条件を作成するために必要なメカニズムが用意されています。 これらのメカニズムを使用すると、カスタム フィルター処理シナリオを作成できます。 たとえば、フィルターを作成して、ユーザーが管理者ロールに属している場合は、ページのレンダリング時に特定のコントロールがゾーンに追加され、ユーザーがユーザー ロールに属している場合は、それらのコントロールは追加されません。

承認プロセス中にコントロールをフィルター処理するメカニズムは、コントロールの AuthorizationFilter プロパティWebPartIsAuthorizedおよび OnAuthorizeWebPart メソッド、および コントロールのAuthorizeWebPartWebPartManagerイベントです。

フィルター処理シナリオを作成するには、基本的に 2 つのタスクがあります。 まず、フィルター処理する各WebPartコントロールの プロパティにAuthorizationFilter文字列を割り当てます。 これらの文字列値は任意ですが、フィルター処理する条件を含める必要があります。 たとえば、管理者ユーザーがページを表示している場合にのみ、特定のコントロールをゾーンに追加する場合は、 の文字列値 admin を プロパティに割り当てることができます。 その後、ASP.NET ロール機能を使用し、サイトのすべてのユーザーを管理者、マネージャー、ユーザーなどのさまざまなロールに追加できます。 ページが読み込まれているとき、フィルター コードはユーザーがどのロールにあるかを確認し、それをチェック対象のコントロールの承認フィルター値と比較し、ユーザーが管理者ロールにあり、コントロールの AuthorizationFilter 値を に admin設定した場合、コントロールを追加できます。

フィルター処理シナリオを作成する 2 番目の手順は、コントロールのプロパティ値を確認 AuthorizationFilter し、各コントロールがゾーンに WebPart 追加される前に承認されているかどうかを判断するコードを記述することです。 このフィルター 処理コードを配置する場所には、2 つのオプションがあります。 最初のオプションは、ページ開発者に推奨されるオプションです。 イベントを処理するメソッドは AuthorizeWebPart 、Web ページ サーバー スクリプト コードまたはコード分離ファイルで直接作成できます。 次のサンプル マークアップ コードに示すように、ページ内のコントロールのタグに 属性をWebPartManager追加OnAuthorizeWebPartして、メソッドを イベントに関連付けます。

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

カスタム メソッドで行う必要がある操作は、フィルター条件の各WebPartコントロールを確認し、結果に基づいてブール値をオブジェクトの WebPartAuthorizationEventArgs プロパティにIsAuthorized割り当てて、コントロールを追加できるかどうかをWebPart示す操作です。 「例」セクションのコードは、これを行う方法を示しています。

フィルター コードを配置する場所の 2 番目のオプションは、 クラスから WebPartManager 継承し、メソッドをオーバーライドしてフィルター条件を確認することです。 これを行うためにオーバーライドできる 2 つのメソッドは、 WebPartManager.IsAuthorized(Type, String, String, Boolean) メソッドまたは OnAuthorizeWebPart メソッドです。 どちらのメソッドでも機能しますが、ほとんどの場合、メソッドをオーバーライド IsAuthorized することをお勧めします。これは、承認プロセス全体をよりプログラム的に制御できるためです。一方 OnAuthorizeWebPart 、メソッドはイベントを発生させ、ハンドラーをチェックする特定のタスクを 1 つだけ実行します。 メソッドをオーバーライドIsAuthorizedするカスタム WebPartManager クラスのコード例については、 メソッドのオーバーロードをWebPartManager.IsAuthorized(Type, String, String, Boolean)参照してください。

適用対象

こちらもご覧ください