WebPartManager.IsAuthorized メソッド

定義

WebPart コントロールまたはその他のサーバー コントロールをページに追加できるかどうかを判断します。

オーバーロード

IsAuthorized(WebPart)

ページへのコントロールの追加が承認されているかどうかを判断する最初の手順を実行します。

IsAuthorized(Type, String, String, Boolean)

ページへのコントロールの追加が承認されているかどうかを判断する最後の手順を実行します。

注釈

Web パーツ機能の柔軟性の一部は、実行時にサーバー コントロールを Web ページに追加できることです。 サーバー コントロール (カスタム コントロール、カスタム WebPart サーバー コントロール、ユーザー コントロール、または ASP.NET コントロール) を追加できる一般的なシナリオがいくつかあります。

次の一般的なシナリオでは、Web パーツ コントロール セットはサーバー コントロールをページに追加しようと試 IsAuthorized み、それらを承認するために メソッドが呼び出されます。

  • サーバー コントロールをゾーン内の Web ページのマークアップで宣言して追加する WebPartZoneBase 場合。

  • サーバー コントロールがプログラムによってゾーンに追加された場合。

  • ユーザーがサーバー コントロールをコントロールの Web パーツ カタログにインポートする場合。

  • パーソナル化データ ストアから既存のサーバー コントロールが読み込まれるとき。

  • サーバー コントロールをサーバー コントロールの DeclarativeCatalogPart カタログで使用できるように、コントロールに追加する場合。

コントロールが追加される各シナリオでは、 メソッドが呼び出され、 IsAuthorized コントロールの追加を許可するためにすべての承認基準が満たされていることを確認します。 コントロールが承認されると、フィルター処理のシナリオがなかった場合と同様に、通常どおりに追加されます。 コントロールが承認されていない場合、Web パーツ コントロール セットはコンテキストに応じて、いくつかの方法で応答できます。 コントロール セットは、承認されていないパーツの追加にサイレント モードで失敗する場合があります (ユーザーに通知する必要がない場合)、エラー メッセージを表示したり、クラスの UnauthorizedWebPart インスタンスをプレースホルダーとして追加したりできます。 このプレースホルダー オブジェクトはページには表示されませんが、未承認のコントロールが除外されたことを示すためにページソース コードに表示されます。

コントロールが承認されているかどうかの決定要因は、承認フィルターです。 承認フィルターは、Web パーツ コントロール セットの機能であり、開発者は指定した条件を満たさないコントロールをページから除外できます。

フィルター処理シナリオを作成するには、開発者が 2 つのことを行う必要があります。 最初に、シナリオで使用する予定の各WebPartコントロールの プロパティにAuthorizationFilter文字列値 (値は任意の値を指定できます) を割り当てる必要があります。 また、コントロールではない WebPart 他の種類のサーバー コントロールに対してこのプロパティに値を割り当てることもできます。これは、コントロールがゾーンに WebPartZoneBase 配置されている場合、このようなコントロールは実行時にコントロールで GenericWebPart ラップされ、このコントロールは プロパティを AuthorizationFilter 継承するためです。

フィルター処理シナリオを作成するために必要な 2 番目の手順は、 メソッドを IsAuthorized(Type, String, String, Boolean) オーバーライドするか、イベントのイベント ハンドラーを AuthorizeWebPart 作成することです。 これらのメソッドでは、開発者は プロパティをAuthorizationFilterチェックできます。値がコントロールを承認してはならないことを示している場合、開発者は メソッドが のfalse値を返すようにIsAuthorizedします。

注意

メソッドを使用 IsAuthorized してカスタマイズされたフィルター処理シナリオを設定する方法のコード例と説明については、メソッドのオーバーロードに関するトピックを参照してください。

IsAuthorized(WebPart)

ページへのコントロールの追加が承認されているかどうかを判断する最初の手順を実行します。

public:
 bool IsAuthorized(System::Web::UI::WebControls::WebParts::WebPart ^ webPart);
public bool IsAuthorized (System.Web.UI.WebControls.WebParts.WebPart webPart);
member this.IsAuthorized : System.Web.UI.WebControls.WebParts.WebPart -> bool
Public Function IsAuthorized (webPart As WebPart) As Boolean

パラメーター

webPart
WebPart

承認をチェックする対象の WebPart コントロールまたはその他のサーバー コントロール。

戻り値

webPart をページに追加できるかどうかを示すブール値。

例外

webPartnullです。

次のコード例では、コードから メソッドを IsAuthorized(WebPart) 呼び出して、コントロールがページに追加される権限があるかどうかを判断する方法を示します。

このコード例には、次の 3 つの部分があります。

  • メソッドをオーバーライドするIsAuthorizedカスタム WebPartManager コントロール。

  • コントロールのフィルターを作成する WebPart Web ページ。

  • コード例を実行する方法の説明。

このコード例では、オーバーロード メソッドをオーバーライドするカスタム WebPartManager コントロールを IsAuthorized(Type, String, String, Boolean) 使用して、 プロパティのカスタム処理を AuthorizationFilter 提供します。 このコントロールは のプロパティ値 admin をチェックし、値が存在する場合はコントロールを承認します。 コントロールの値が異なる場合は、承認されません。プロパティ値を持たないコントロールも承認されます。フィルター処理シナリオには含まれていないと推定されます。

このコード例を実行するには、このソース コードをコンパイルする必要があります。 明示的にコンパイルし、結果のアセンブリを Web サイトの Bin フォルダーまたはグローバル アセンブリ キャッシュに配置できます。 または、ソース コードをサイトの App_Code フォルダーに配置して、実行時に動的にコンパイルすることもできます。 このコード例では、動的コンパイル メソッドを使用します。 コンパイル方法を示すチュートリアルについては、「 チュートリアル: カスタム Web サーバー コントロールの開発と使用」を参照してください。

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;
            }
        }
  }
}
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

コード例の 2 番目の部分では、コントロールを除外できるフィルターを作成します。 次の Web ページには、 要素に 3 つの ASP.NET サーバー コントロールが <asp:webpartzone> 含まれています。 1 つ目と 2 番目のコントロールのプロパティは AuthorizationFilter 異なる値に設定されており、3 番目のコントロールでは プロパティが割り当てられません。 この承認値は実行時に確認でき、フィルターが開発者によって設定された条件と一致する場合は、コントロールをページに追加できます。 また、 メソッドでは Page_Load 、 メソッドを IsAuthorized(WebPart) 呼び出して各コントロールが承認されているかどうかを判断し、承認されている場合は各コントロールの ExportMode プロパティを設定します。

<%@ Page Language="C#" %>
<%@ Register Namespace="Samples.AspNet.CS.Controls" 
    TagPrefix="aspSample"%>


<!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 Page_Load(object sender, EventArgs e)
  {
    foreach (WebPart part in mgr1.WebParts)
    {
      if (mgr1.IsAuthorized(part))
        part.ExportMode = WebPartExportMode.All;
    }
    
  }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<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>
<%@ Page Language="vb" %>
<%@ Register Namespace="Samples.AspNet.VB.Controls" 
    TagPrefix="aspSample"%>


<!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 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 xmlns="http://www.w3.org/1999/xhtml" >
<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>

コード例を機能させるには、Web パーツ記述ファイルのエクスポートを有効にするには、Web.config ファイルに設定を追加する必要があります。 このコード例の Web ページと同じディレクトリにWeb.config ファイルがあることを確認します。 セクション内に <system.web> 、次の <webParts> マークアップのように 属性 enableExport が に true設定された要素があることを確認します。

<webParts enableExport="true">

...

</webParts>

ブラウザーでページを読み込んだ後、オーバーライドされたメソッドの条件に一致するため、最初のコントロールが表示されることに注意してください。 2 番目のコントロールは、フィルターによって除外されるため、ページに追加されません。 3 番目のコントロールも追加されます。これは、プロパティ AuthorizationFilter が設定されていないためです。 いずれかのコントロールのタイトル バーで動詞メニュー アイコンをクリックすると、それぞれの ExportMode プロパティ値が割り当てられているため、両方をエクスポートできることに注意してください。

注釈

メソッドはIsAuthorized、コントロールの承認をチェックに設定された Web パーツ コントロールによって呼び出される初期メソッドですWebPart。 パラメーターとして を受け取 webPart り、最終的にコントロールをページに追加するかどうかを決定するプロセスを開始します。 特定のコントロールが承認されているかどうかを判断する必要がある場合は、コードからこのメソッドを直接呼び出します。

このメソッドは、コントロールがクラスから WebPart 継承されるか、コントロールであるかを判断する最初のタスクを GenericWebPart 実行し、存在する場合は、そのコントロールに含まれる子コントロールの種類を決定します。 承認のタスクを完了するために、オーバーロード メソッドを IsAuthorized(Type, String, String, Boolean) 呼び出します。

注意 (呼び出し元)

このメソッドは、コードから直接呼び出されます。 承認プロセスのプログラムによる制御を強化する場合は、オーバーロード メソッドを IsAuthorized(Type, String, String, Boolean) オーバーライドできます。

こちらもご覧ください

適用対象

IsAuthorized(Type, String, String, Boolean)

ページへのコントロールの追加が承認されているかどうかを判断する最後の手順を実行します。

public:
 virtual bool IsAuthorized(Type ^ type, System::String ^ path, System::String ^ authorizationFilter, bool isShared);
public virtual bool IsAuthorized (Type type, string path, string authorizationFilter, bool isShared);
abstract member IsAuthorized : Type * string * string * bool -> bool
override this.IsAuthorized : Type * string * string * bool -> bool
Public Overridable Function IsAuthorized (type As Type, path As String, authorizationFilter As String, isShared As Boolean) As Boolean

パラメーター

type
Type

承認されているかどうかを確認するコントロールの Type

path
String

コントロールがユーザー コントロールの場合は、承認されるコントロールのソース ファイルへの相対アプリケーション パス。

authorizationFilter
String

コントロールをページに追加できるかどうかを判断して承認するために使用される、AuthorizationFilter コントロールの WebPart プロパティに割り当てる任意の文字列値。

isShared
Boolean

承認されているかどうかを確認するコントロールが共有コントロール (つまり、アプリケーションの多くのユーザーまたはすべてのユーザーに対して表示され、その IsShared プロパティ値が true に設定されている) かどうかを示します。

戻り値

ページへのコントロールの追加が承認されるかどうかを示すブール値。

例外

typenullです。

type がユーザー コントロールで、pathnull または空の文字列 ("") のいずれかです。

- または -

type がユーザー コントロール以外で、path に値が割り当てられています。

次のコード例では、 メソッドをオーバーライド IsAuthorized して、コントロールがページに追加される権限があるかどうかを判断する方法を示します。

最初の手順では、コントロールを除外できるフィルターを作成します。 次の Web ページには、 要素に 3 つの ASP.NET サーバー コントロールが <asp:webpartzone> 含まれています。 1 つ目と 2 番目のコントロールのプロパティは AuthorizationFilter 異なる値に設定されており、3 番目のコントロールでは プロパティが割り当てられません。 この承認値は実行時に確認でき、フィルターが開発者によって設定された条件と一致する場合は、コントロールをページに追加できます。

<%@ Page Language="C#" %>
<%@ Register Namespace="Samples.AspNet.CS.Controls" 
    TagPrefix="aspSample"%>


<!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 Page_Load(object sender, EventArgs e)
  {
    foreach (WebPart part in mgr1.WebParts)
    {
      if (mgr1.IsAuthorized(part))
        part.ExportMode = WebPartExportMode.All;
    }
    
  }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<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>
<%@ Page Language="vb" %>
<%@ Register Namespace="Samples.AspNet.VB.Controls" 
    TagPrefix="aspSample"%>


<!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 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 xmlns="http://www.w3.org/1999/xhtml" >
<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>

2 番目の手順では、 メソッドを IsAuthorized(Type, String, String, Boolean) オーバーライドし、承認フィルターのカスタム処理を作成します。 コードは、プロパティに値があるかどうかを最初にチェックし、プロパティを割り当 AuthorizationFilter てないコントロールが自動的に追加されるようにします。 コントロールにフィルターがある場合、コードはフィルター値が と等しい場合にのみ をadmintrueします。 これは、ロールに応じて特定のコントロールを特定のユーザーに表示するために使用できる簡単なメカニズムを示しています。 ロールを使用する完全な例はこのトピックの範囲を超えていますが、このコード例ではオーバーライドされたメソッドと同じロジックを使用できます。ただし、現在のユーザーが承認フィルター値に一致するロールに含まれているかどうかをチェックし、そのユーザーに対してのみコントロールを追加できます。 これにより、一部のユーザーにすべてのコントロールが表示され、他のユーザーには選択したコントロールのみが表示されるページを作成できます。 これは、ロールを使用した場合にフィルターをチェックするロジックがどのように表示されるかを示しています。

If Roles.IsUserInRole(Page.User.Identity.Name, authorizationFilter) Then  
  return True  
Else  
  return False  
End If  
if(Roles.IsUserInRole(Page.User.Identity.Name, authorizationFilter))  
    return true;  
else  
    return false;  

コード例を実行するには、このソース コードをコンパイルする必要があります。 明示的にコンパイルし、結果のアセンブリを Web サイトの Bin フォルダーまたはグローバル アセンブリ キャッシュに配置できます。 または、ソース コードをサイトの App_Code フォルダーに配置して、実行時に動的にコンパイルすることもできます。 このコード例では、動的コンパイル メソッドを使用します。 コンパイル方法を示すチュートリアルについては、「 チュートリアル: カスタム Web サーバー コントロールの開発と使用」を参照してください。

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;
            }
        }
  }
}
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

ブラウザーでページを読み込んだ後、オーバーライドされたメソッドの条件に一致するため、最初のコントロールが表示されることに注意してください。 フィルター値が除外されるため、2 番目のコントロールはページに追加されません。 3 番目のコントロールは、プロパティが設定されていないため AuthorizationFilter 、追加されます。 2 番目のコントロールのプロパティ値を最初のコントロールのプロパティ値と一致するように変更し、ページを再度実行すると、2 番目のコントロールも追加されます。

注釈

オーバーロード メソッドは IsAuthorized(Type, String, String, Boolean) 、コントロールがページに追加される権限があるかどうかを判断する最後の手順を実行します。 メソッドは、 が type 有効な型であり、チェック対象のコントロールが path ユーザー コントロールの場合にのみ値を持っていることを確認します。 次に、イベントを発生させるクリティカル OnAuthorizeWebPart メソッドを AuthorizeWebPart 呼び出します。

注意 (継承者)

承認を確認するときに追加の処理を提供する場合は、 クラスから WebPartManager 継承することで、このメソッドをオーバーライドできます。 メソッドをオーバーライドして、 パラメーター内authorizationFilterの特定の値をチェックし、値に基づいて、コントロールをページに追加するかどうかを決定するブール値を返します。

承認フィルターをチェックし、カスタム処理を提供するページ開発者の場合は、クラスから継承することなく、.aspx ページまたは分離コード ファイルでインラインで行うオプションがあります。 コントロールの メソッドのページで代替イベント ハンドラーをOnAuthorizeWebPart(WebPartAuthorizationEventArgs)WebPartManager宣言できます。 詳細と例については、 メソッドを OnAuthorizeWebPart(WebPartAuthorizationEventArgs) 参照してください。

こちらもご覧ください

適用対象