UnauthorizedWebPart クラス
アセンブリ: System.Web (system.web.dll 内)


Web パーツ コントロール セットには、個々の WebPart コントロールをページに追加できるかどうかを判断するための承認機構が用意されています。開発者は、オプションで WebPart コントロールの AuthorizationFilter プロパティに任意の文字列を割り当てることができます。WebPartManager コントロールはページにコントロールを追加するときに、IsAuthorized メソッドを使用して、開発者が設定した基準に対してこのフィルタ値を確認し、コントロールが承認されていない場合は false を返します。
![]() |
---|
サーバー コントロールとユーザー コントロールは実行時に GenericWebPart オブジェクトでラップされ、このオブジェクトは AuthorizationFilter プロパティを継承するため、この承認機構は、WebPartZoneBase ゾーンに配置されたこれらのコントロールでも動作します。 |
WebPart コントロールが承認されていない場合、WebPartManager コントロールは、承認されていないコントロールの代わりに UnauthorizedWebPart コントロールをページのコントロール ツリーに挿入します。コントロール ツリー内の UnauthorizedWebPart コントロールは、ページ内の承認されていないコントロールの位置を予約し、ユーザーが以前 WebPart コントロールに適用したパーソナル化データが失われるのを防ぎます。
UnauthorizedWebPart コントロールは、その挿入先となるページには表示されず、また表示されるページのソース コード内にも出現しません。開発者は、WebPartManager コントロールの WebParts プロパティを調べることにより、ページのコントロール ツリー内にそれが存在することを確認できます。

UnauthorizedWebPart コントロールの使用方法を示すコード例を次に示します。
コード例の最初の部分は、IsAuthorized(WebPart) メソッドをオーバーライドしてカスタムの承認基準を作成する、カスタム WebPartManager コントロールです。特定の値が設定された AuthorizationFilter プロパティを持つ WebPart コントロール、またはそのプロパティに値が割り当てられていないコントロールは承認されますが、これらの基準を満たさないコントロールは承認されません。
Imports System Imports System.Web Imports System.Web.Security Imports System.Security.Permissions Imports System.Web.UI Imports System.Web.UI.WebControls Imports System.Web.UI.WebControls.WebParts Namespace Samples.AspNet.VB.Controls <AspNetHostingPermission(SecurityAction.Demand, _ Level:=AspNetHostingPermissionLevel.Minimal)> _ <AspNetHostingPermission(SecurityAction.InheritanceDemand, _ Level:=AspNetHostingPermissionLevel.Minimal)> _ Public Class MyManagerAuthorize Inherits WebPartManager Public Overrides Function IsAuthorized(ByVal type As Type, _ ByVal path As String, ByVal authorizationFilter As String, _ ByVal isShared As Boolean) As Boolean If Not String.IsNullOrEmpty(authorizationFilter) Then If authorizationFilter = "admin" Then Return True Else Return False End If Else Return True End If End Function End Class End Namespace
using System; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; namespace Samples.AspNet.CS.Controls { public class MyManagerAuthorize : WebPartManager { public override bool IsAuthorized(Type type, string path, string authorizationFilter, bool isShared) { if (!String.IsNullOrEmpty(authorizationFilter)) { if (authorizationFilter == "admin") return true; else return false; } else return true; } } }
コード例の 2 番目の部分は、カスタム WebPartManager コントロールをホストする Web ページです。ここでは、<asp:webpartzone> 要素内に 3 つの静的サーバー コントロールが宣言されています。これらのコントロールは実際には WebPart コントロールではありませんが、実行時にこれらが GenericWebPart オブジェクトでラップされるため、これらを WebPart コントロールとして処理し、AuthorizationFilter プロパティに値を割り当てることができます。BulletedList コントロールは、カスタム WebPartManager コントロールの基準に従ってそのコントロールが承認されるように値が設定されたフィルタを保持します。Label コントロールは、承認されないように設定されたフィルタ値を保持します。Calendar コントロールはプロパティに値を割り当てないため、既定で承認されます。
<%@ Page Language="vb" %> <%@ Register Namespace="Samples.AspNet.VB.Controls" TagPrefix="aspSample"%> <script runat="server"> Protected Sub Page_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) Dim part As WebPart For Each part In mgr1.WebParts If mgr1.IsAuthorized(part) Then part.ExportMode = WebPartExportMode.All End If Next End Sub Protected Sub Button1_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Label2.Text = String.Empty Dim part As WebPart For Each part In mgr1.WebParts Label2.Text += part.ID & "<br />" Next End Sub </script> <html > <head id="Head1" runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <aspSample:MyManagerAuthorize ID="mgr1" runat="server" /> <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" AuthorizationFilter="user" /> <asp:Calendar ID="Calendar1" runat="server"></asp:Calendar> </ZoneTemplate> </asp:WebPartZone> <hr /> <asp:Button ID="Button1" runat="server" Text="List WebPart Controls" OnClick="Button1_Click" /> <br /> <asp:Label ID="Label2" runat="server" Text="" /> </div> </form> </body> </html>
<%@ Page Language="C#" %> <%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.CS.Controls" %> <script runat="server"> protected void Page_Load(object sender, EventArgs e) { foreach (WebPart part in mgr1.WebParts) { if (mgr1.IsAuthorized(part)) part.ExportMode = WebPartExportMode.All; } } protected void Button1_Click(object sender, EventArgs e) { Label2.Text = String.Empty; foreach (WebPart part in mgr1.WebParts) Label2.Text += part.ID + "<br />"; } </script> <html > <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <aspSample:MyManagerAuthorize ID="mgr1" runat="server" /> <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" AuthorizationFilter="user" /> <asp:Calendar ID="Calendar1" runat="server"></asp:Calendar> </ZoneTemplate> </asp:WebPartZone> <hr /> <asp:Button ID="Button1" runat="server" Text="List WebPart Controls" OnClick="Button1_Click" /> <br /> <asp:Label ID="Label2" runat="server" Text="" /> </div> </form> </body> </html>
コード例の 3 番目の部分は、Web パーツ記述ファイルをエクスポートできるようにするために Web.config ファイルに追加する必要のある設定です。このコード例の Web ページと同じディレクトリ内に Web.config ファイルが存在することを確認してください。<system.web> セクション内に、次のマークアップのように、true に設定された enableExport 属性を持つ <webParts> 要素が存在することを確認します。
<webParts enableExport="true">
...
</webParts>
ブラウザにページを読み込み、BulletedList コントロールと Calendar コントロールは予期したとおりに表示されても、Label コントロールは承認されなかったため表示されないことを確認します。[List WebPart Controls] ボタンをクリックすると、WebPartManager コントロールによって WebParts コレクション内のすべてのコントロールの ID が一覧表示されます。Label コントロールの ID が一覧に示され、ページにラベルが表示されなくても、UnauthorizedWebPart コントロールがページのコントロール ツリーに追加され、その場所が保持されていることがわかります。


System.Web.UI.Control
System.Web.UI.WebControls.WebControl
System.Web.UI.WebControls.Panel
System.Web.UI.WebControls.WebParts.Part
System.Web.UI.WebControls.WebParts.WebPart
System.Web.UI.WebControls.WebParts.ProxyWebPart
System.Web.UI.WebControls.WebParts.UnauthorizedWebPart


Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


- UnauthorizedWebPart クラスのページへのリンク