WebPartManager.IsAuthorized メソッド (WebPart)
アセンブリ: System.Web (system.web.dll 内)

Dim instance As WebPartManager Dim webPart As WebPart Dim returnValue As Boolean returnValue = instance.IsAuthorized(webPart)
戻り値
webPart をページに追加できるかどうかを示すブール値。


IsAuthorized メソッドは、WebPart コントロールの承認をチェックする場合に Web パーツ コントロール セットで最初に呼び出されるメソッドです。これは、パラメータとして webPart を受け取り、そのコントロールをページに追加するかどうかを最終的に決定するプロセスを開始します。指定したコントロールが承認されるかどうかを判断する必要がある場合に、コードから直接このメソッドを呼び出します。
このメソッドは、コントロールが WebPart クラスから継承するかどうか、またはコントロールが GenericWebPart コントロールの場合は、それに含まれている子コントロールの種類が何かを判断する最初のタスクを実行します。メソッドは、IsAuthorized(Type,String,String,Boolean) オーバーロード メソッドを呼び出し、承認のタスクを完了します。
呼び出し時の注意 このメソッドはコードから直接呼び出します。承認プロセスをプログラムで詳細に制御する場合は、IsAuthorized(Type,String,String,Boolean) オーバーロード メソッドをオーバーライドできます。
コードから IsAuthorized(WebPart) メソッドを呼び出し、ページへのコントロールの追加が承認されるかどうかを判断する方法のコード例を次に示します。
このコード例は、IsAuthorized(Type,String,String,Boolean) オーバーロード メソッドをオーバーライドするカスタム WebPartManager コントロールを使用して、AuthorizationFilter プロパティのカスタム ハンドリングを提供します。このコントロールは、プロパティ値に admin があるかどうかチェックし、この値が存在する場合はコントロールを承認します。コントロールが異なる値を持っている場合、そのコントロールは承認されません。このプロパティ値を持っていないコントロールは、フィルタ処理の対象外と見なされるため承認されます。
このコード例を実行するためには、このソース コードをコンパイルする必要があります。それを明示的にコンパイルし、コンパイル済みのアセンブリを Web サイトの Bin フォルダまたはグローバル アセンブリ キャッシュに配置できます。サイトの App_Code フォルダにソース コードを配置し、実行時に動的にコンパイルすることもできます。このコード例は、動的コンパイルの方法を使用します。コンパイル方法を示すチュートリアルについては、「チュートリアル : カスタム サーバー コントロールの開発と使用」を参照してください。
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 番目の部分は、コントロールを除外できるフィルタを作成します。次の Web ページには、<asp:webpartzone> 要素に 3 つの ASP.NET サーバー コントロールが含まれています。最初と 2 番目のコントロールは、それぞれ異なる値が設定された AuthorizationFilter プロパティを持ち、3 番目のコントロールにはプロパティが割り当てられていません。実行時にこの承認値をチェックし、開発者が設定した条件をフィルタが満たす場合は、ページにコントロールを追加できます。また、Page_Load メソッドでは、コードが IsAuthorized(WebPart) メソッドを呼び出し、それぞれのコントロールが承認されるかどうかを判断します。承認される場合は、それぞれのコントロールの ExportMode プロパティを設定します。
<%@ 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 </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:Literal ID="Literal1" runat="server"></asp:Literal> </div> </form> </body> </html>
<%@ Page Language="C#" %> <%@ Register Namespace="Samples.AspNet.CS.Controls" TagPrefix="aspSample"%> <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; } } </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:Literal ID="Literal1" runat="server"></asp:Literal> </div> </form> </body> </html>
コード例が機能するには、Web.config ファイルに設定を追加して、Web パーツ記述ファイルをエクスポートできるようにする必要があります。このコード例の Web ページと同じディレクトリ内に Web.config ファイルが存在することを確認してください。<system.web> セクション内に、次のマークアップのように、true に設定された enableExport 属性を持つ <webParts> 要素が存在することを確認します。
<webParts enableExport="true">
...
</webParts>
ブラウザにページを読み込んだ後、最初のコントロールが表示されます。これはこのコントロールが、オーバーライドされたメソッドの条件を満たすためです。2 番目のコントロールはフィルタで除外されるため、ページに追加されません。3 番目のコントロールは AuthorizationFilter プロパティが設定されていないため、このコントロールもページに追加されます。いずれかのコントロールのタイトル バーにある動詞メニュー アイコンをクリックすると、それぞれに ExportMode プロパティ値が割り当てられているため、両方をエクスポートできます。

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 によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


WebPartManager.IsAuthorized メソッド (Type, String, String, Boolean)
アセンブリ: System.Web (system.web.dll 内)

Public Overridable Function IsAuthorized ( _ type As Type, _ path As String, _ authorizationFilter As String, _ isShared As Boolean _ ) As Boolean
Dim instance As WebPartManager Dim type As Type Dim path As String Dim authorizationFilter As String Dim isShared As Boolean Dim returnValue As Boolean returnValue = instance.IsAuthorized(type, path, authorizationFilter, isShared)
public virtual bool IsAuthorized ( Type type, string path, string authorizationFilter, bool isShared )
public: virtual bool IsAuthorized ( Type^ type, String^ path, String^ authorizationFilter, bool isShared )
public boolean IsAuthorized ( Type type, String path, String authorizationFilter, boolean isShared )
public function IsAuthorized ( type : Type, path : String, authorizationFilter : String, isShared : boolean ) : boolean
- authorizationFilter
コントロールをページに追加できるかどうかを判断して承認するために使用される、WebPart コントロールの AuthorizationFilter プロパティに割り当てる任意の文字列値。
- isShared
承認されるかどうかの確認の対象となるコントロールが共有コントロールである (つまり、アプリケーションの多くのユーザーまたはすべてのユーザーに対して表示され、その IsShared プロパティ値が true に設定されている) かどうかを示します。
ページへのコントロールの追加が承認されるかどうかを示すブール値。

例外の種類 | 条件 |
---|---|
ArgumentNullException | type が null 参照 (Visual Basic では Nothing) です。 |
ArgumentException | type がユーザー コントロールで、path が null 参照 (Visual Basic では Nothing) または空の文字列 ("") のいずれかです。 または type がユーザー コントロール以外で、path に値が割り当てられています。 |

IsAuthorized(Type,String,String,Boolean) オーバーロード メソッドは、ページへのコントロールの追加が承認されているかどうかを判断する最後の手順を実行します。このメソッドは、type が有効な型であること、チェック対象のコントロールがユーザー コントロールの場合にのみ path に値が設定されていることを確認します。次に、このメソッドは重大な OnAuthorizeWebPart メソッドを呼び出し、AuthorizeWebPart イベントを発生させます。
継承時の注意 承認をチェックするときに追加の処理を用意する場合、このメソッドは WebPartManager クラスから継承してオーバーライドできます。このメソッドをオーバーライドして authorizationFilter パラメータの特定の値をチェックし、その値に基づいて、コントロールがページに追加されるかどうかを判断するブール値を返します。 また、ページの開発者が承認フィルタをチェックしてカスタム ハンドリングを提供する場合、任意のクラスから継承しなくても、.aspx ページまたは分離コード ファイルのインラインでこれを実行できます。このページには、WebPartManager コントロールの OnAuthorizeWebPart メソッドの代替イベント ハンドラを宣言できます。詳細と例については、OnAuthorizeWebPart メソッドのトピックを参照してください。
IsAuthorized メソッドをオーバーライドし、ページへのコントロールの追加が承認されるかどうかを判断する方法を次のコード例に示します。
最初の手順では、コントロールを除外できるフィルタを作成します。次の Web ページには、<asp:webpartzone> 要素に 3 つの ASP.NET サーバー コントロールが含まれています。最初と 2 番目のコントロールは、それぞれ異なる値が設定された AuthorizationFilter プロパティを持ち、3 番目のコントロールにはプロパティが割り当てられていません。実行時にこの承認値がチェックされ、開発者が設定した条件をフィルタが満たす場合は、ページにコントロールを追加できます。
<%@ 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 </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:Literal ID="Literal1" runat="server"></asp:Literal> </div> </form> </body> </html>
<%@ Page Language="C#" %> <%@ Register Namespace="Samples.AspNet.CS.Controls" TagPrefix="aspSample"%> <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; } } </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:Literal ID="Literal1" runat="server"></asp:Literal> </div> </form> </body> </html>
2 番目の手順では、IsAuthorized(Type,String,String,Boolean) メソッドをオーバーライドし、承認フィルタのカスタム ハンドリングを作成します。このコードは、AuthorizationFilter プロパティが値を持っているかどうかを最初にチェックし、割り当てられていないコントロールは自動的に追加されるようにします。コントロールがフィルタを持っている場合、このコードはフィルタ値が admin に等しいときにのみ true を返します。これは、ユーザーのロールに応じて、特定のユーザーに特定のコントロールを表示する場合に使用できる簡単なしくみを示しています。ロールを使用する完全な例はこのトピックの範囲外ですが、現在のユーザーが承認フィルタ値に一致するロールになっているかどうかをチェックできる、このコード例におけるオーバーライドされたメソッドと同じロジックを使用すると、そのユーザーの場合にだけコントロールを追加できます。これにより、一部のユーザーにはすべてのコントロールが表示され、その他のユーザーには選択したコントロールだけが表示されるページを作成できます。ロールを使用してフィルタをチェックする場合のロジックの例を次に示します。
If Roles.IsUserInRole(Page.User.Identity.Name, authorizationFilter) Then return True Else return False End If
[C#]
if(Roles.IsUserInRole(Page.User.Identity.Name, authorizationFilter)) return true; else return false;
コード例を実行するためには、このソース コードをコンパイルする必要があります。それを明示的にコンパイルし、コンパイル済みのアセンブリを Web サイトの Bin フォルダまたはグローバル アセンブリ キャッシュに配置できます。サイトの App_Code フォルダにソース コードを配置し、実行時に動的にコンパイルすることもできます。このコード例は、動的コンパイルの方法を使用します。コンパイル方法を示すチュートリアルについては、「チュートリアル : カスタム サーバー コントロールの開発と使用」を参照してください。
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 番目のコントロールは、そのフィルタ値が除外されるため、ページに追加されません。3 番目のコントロールは AuthorizationFilter プロパティが設定されていないため、このコントロールはページに追加されます。2 番目のコントロールのプロパティ値を最初のコントロールと同じ値に変更し、このページをもう一度実行すると、2 番目のコントロールも追加されます。

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 によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


WebPartManager.IsAuthorized メソッド

名前 | 説明 |
---|---|
WebPartManager.IsAuthorized (WebPart) | ページへのコントロールの追加が承認されているかどうかを判断する最初の手順を実行します。 |
WebPartManager.IsAuthorized (Type, String, String, Boolean) | ページへのコントロールの追加が承認されているかどうかを判断する最後の手順を実行します。 |
