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)
パラメーター
イベント データを含む WebPartAuthorizationEventArgs 。
例
次のコード例では、 AuthorizeWebPart イベントのカスタム イベント ハンドラーを設定して、ハンドラーが OnAuthorizeWebPart メソッドのカスタム フィルター コードを提供できるようにする方法を示します。 この例は、ページ開発者がフィルター処理シナリオと、ページに追加する WebPart コントロールの承認を提供する一般的な方法です。
Web ページで、 <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>
ロールでのユーザーの設定は、このトピックの範囲外であるため、このコード例では、フィルター処理でユーザー ロールを確認しません。 ただし、ユーザー ロールに従ってコントロールをフィルター処理するシナリオは、このフィルター処理機能の最も一般的な用途の 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 メソッドは、WebPart コントロールがページに追加される承認をチェックするときに、IsAuthorized メソッドによって呼び出されます。 OnAuthorizeWebPart メソッドが呼び出されると、AuthorizeWebPart イベントが発生し、イベントのハンドラー メソッドがある場合はハンドラーを呼び出します。
WebPartコントロールを承認するプロセスは、重要な Web パーツ機能です。 WebPartManager コントロールによってゾーンに追加されるすべてのWebPartまたはサーバー コントロールは、承認プロセスを経て、コントロールを追加できるかどうかを判断します。 既定では、Web パーツ コントロール セットでは、コントロールがゾーンに追加されないようにするためのフィルター条件は提供されません。 ただし、コントロール セットには、開発者が独自のフィルター条件を作成するために必要なメカニズムが用意されています。 これらのメカニズムを使用すると、カスタム フィルター処理シナリオを作成できます。 たとえば、ユーザーが管理者ロールに含まれている場合、ページのレンダリング時に特定のコントロールがゾーンに追加され、ユーザーがユーザー ロールに含まれている場合は、それらのコントロールが追加されないようにフィルターを作成できます。
承認プロセス中にコントロールをフィルター処理するメカニズムは、WebPart コントロールのAuthorizationFilter プロパティ、IsAuthorizedメソッドとOnAuthorizeWebPart メソッド、およびWebPartManager コントロールのAuthorizeWebPart イベントです。
フィルター処理シナリオを作成するには、基本的に 2 つのタスクがあります。 まず、フィルター処理する各WebPart コントロールのAuthorizationFilter プロパティに文字列を割り当てます。 これらの文字列値は任意ですが、フィルター処理する条件を含める必要があります。 たとえば、管理者ユーザーがページを表示している場合にのみ特定のコントロールをゾーンに追加する場合は、プロパティに admin の文字列値を割り当てることができます。 その後、ASP.NET ロール機能を使用し、サイトのすべてのユーザーを管理者、マネージャー、ユーザーなどのさまざまな役割に追加できます。 ページの読み込み時に、フィルター 処理コードはユーザーが存在するロールを確認し、それをチェック対象のコントロールの承認フィルター値と比較します。たとえば、ユーザーが管理者ロールにあり、コントロールの AuthorizationFilter 値を admin に設定した場合は、コントロールを追加できます。
フィルター処理シナリオを作成する 2 番目の手順は、WebPart コントロールのAuthorizationFilter プロパティ値を確認し、各コントロールがゾーンに追加される前に承認されているかどうかを判断するコードを記述することです。 このフィルター 処理コードを配置する場所には、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)オーバーロードを参照してください。