共用方式為


WebPartManager.IsAuthorized 方法

定義

判斷 WebPart 或其他伺服器控制項是否可以加入至頁面。

多載

IsAuthorized(WebPart)

執行會判斷控制項是否獲得授權可加入至頁面的初始步驟。

IsAuthorized(Type, String, String, Boolean)

執行會判斷控制項是否獲得授權可加入至頁面的最終步驟。

備註

網頁元件功能彈性的一部分是能夠在運行時間將伺服器控件新增至網頁。 有許多常見的案例,其中伺服器控件 (可以是自定義控件、自定義 WebPart 伺服器控件、使用者控件或 ASP.NET 控件) 。

在下列常見案例中,Web 元件控制項集會嘗試將伺服器控制項新增至頁面,並 IsAuthorized 呼叫 方法來授權它們:

  • 新增伺服器控制項時,請在區域內網頁 WebPartZoneBase 的標記中宣告它。

  • 當伺服器控制項以程式設計方式新增至區域時。

  • 當使用者將伺服器控制項匯入控制元件的網頁元件目錄時。

  • 從個人化數據存放區載入現有的伺服器控制項時。

  • 將伺服器控制項新增至 DeclarativeCatalogPart 控制項時,使其可在伺服器控制件的目錄中使用。

在每個新增控件的案例中 IsAuthorized ,會呼叫 方法,以確保已符合所有授權準則,以允許新增控件。 當控件獲得授權時,通常會新增它,就像沒有篩選案例一樣。 當控件未獲得授權時,網頁元件控件集可以根據內容以數種方式回應。 如果不需要通知使用者) 、它會顯示錯誤訊息,或者可以將類別的 UnauthorizedWebPart 實例新增為佔位元,控件集可能會以無訊息方式新增未經授權的元件 (。 這個佔位元元物件不會顯示在頁面上,但在頁面原始程式碼中會顯示,表示已排除未經授權的控件。

控件是否獲得授權的決定性是授權篩選條件。 授權篩選是網頁元件控件集中的功能,可讓開發人員從頁面排除不符合指定準則的任何控件。

若要建立篩選案例,開發人員必須執行兩件事。 首先,它們必須指派字串值, (值可以是任意) 到 AuthorizationFilter 他們打算在案例中使用的每個 WebPart 控件的屬性。 它們也可以為非 WebPart 控件的其他伺服器控件類型指派值給此屬性,因為如果這些控件放在 WebPartZoneBase 區域中,這類控件會在運行時間以 GenericWebPart 控件包裝,而且此控件會 AuthorizationFilter 繼承 屬性。

建立篩選案例的第二個必要步驟是覆寫 IsAuthorized(Type, String, String, Boolean) 方法,或建立事件的事件處理程式 AuthorizeWebPart 。 在這些方法中,開發人員可以檢查 AuthorizationFilter 屬性,如果值指出控件不應該獲得授權,開發人員可確保 IsAuthorized 方法傳回的值 false

注意

如需如何使用 方法設定自定義篩選案例 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) 方法,以判斷控件是否有權新增至頁面。

程式代碼範例有三個部分:

此程式代碼範例會使用覆寫多載方法的IsAuthorized(Type, String, String, Boolean)自定義WebPartManager控制項來提供 屬性的AuthorizationFilter自訂處理。 此控件會檢查 的屬性值 admin ,如果值存在,則會授權控件。 如果控件具有不同的值,則不會獲得授權;沒有屬性值的控件也會獲得授權,因為它們假設不是篩選案例的一部分。

若要執行此程式碼範例,您必須編譯此原始程式碼。 您可以明確地編譯它,並將產生的元件放在網站的 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

程式代碼範例的第二個部分會建立可能排除控件的篩選條件。 下列網頁包含元素中的 <asp:webpartzone> 三個 ASP.NET 伺服器控制件。 請注意,第一個和第二個控件的屬性 AuthorizationFilter 會設定為不同的值,而第三個控件不會指派 屬性。 此授權值可以在運行時間檢查,而且如果篩選符合開發人員所設定的準則,則可以將控件新增至頁面。 另請注意,在方法中 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.config 檔案中新增設定,以啟用匯出網頁元件描述檔案。 請確定您在與此程式碼範例網頁相同的目錄中有一個 Web.config 檔案。 在區 <system.web> 段中,請確定有屬性 <webParts> 設定為 enableExporttrue的專案,如下列標記所示。

<webParts enableExport="true">

...

</webParts>

在瀏覽器中載入頁面之後,請注意會顯示第一個控件,因為它符合覆寫方法中的準則。 第二個控件不會新增至頁面,因為篩選會排除該控件。 也會新增第三個控件,因為它沒有其 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 方法,以判斷控件是否有權新增至頁面。

第一個步驟是建立可能排除控件的篩選條件。 下列網頁包含元素中的 <asp:webpartzone> 三個 ASP.NET 伺服器控制件。 請注意,第一個和第二個控件的屬性 AuthorizationFilter 會設定為不同的值,而第三個控件不會指派 屬性。 此授權值可以在運行時間檢查,而且如果篩選符合開發人員所設定的準則,則可以將控件新增至頁面。

<%@ 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>

第二個步驟是覆寫 IsAuthorized(Type, String, String, Boolean) 方法,並建立授權篩選的自定義處理。 請注意,程式代碼會先檢查屬性是否有值,以便自動新增未指派 AuthorizationFilter 屬性的任何控件。 如果控制元件有篩選,則只有在篩選值等於 admin時,程式代碼才會傳回 true 。 這示範一種簡單的機制,您可以根據使用者的角色,將特定控件顯示給特定使用者。 雖然使用角色的完整範例超出本主題的範圍,但您可以使用與此程式碼範例中覆寫方法相同的邏輯,但您可以檢查目前使用者是否在符合授權篩選值的角色中,然後只為該使用者新增控件。 這可讓您建立頁面,其中有些使用者會看到所有控件,而其他使用者只會看到選取的控件。 這是當您使用角色時,檢查篩選條件的邏輯看起來如何:

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;  

若要執行程式碼範例,您必須編譯此原始程式碼。 您可以明確地編譯它,並將產生的元件放在網站的 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

在瀏覽器中載入頁面之後,請注意會顯示第一個控件,因為它符合覆寫方法中的準則。 第二個控件不會新增至頁面,因為會排除其篩選值。 新增第三個控件,因為它沒有其 AuthorizationFilter 屬性集。 如果您變更第二個控件的屬性值以符合第一個控件的屬性值,然後再次執行頁面,也會新增第二個控件。

備註

IsAuthorized(Type, String, String, Boolean)多載方法會執行決定控件是否獲授權新增至頁面的最後步驟。 方法可確保 type 是有效的型別,而且 path 只有在所檢查的控件是使用者控件時,才會有值。 然後它會呼叫引發事件的重要 OnAuthorizeWebPart 方法 AuthorizeWebPart

給繼承者的注意事項

如果您想要在檢查授權時提供其他處理,可以藉由繼承自 WebPartManager 類別來覆寫此方法。 您可能想要覆寫 方法以檢查 參數中的 authorizationFilter 特定值,並根據值傳回布爾值,以判斷控件是否要加入頁面。

對於也想要檢查授權篩選器並提供自定義處理的頁面開發人員,可以選擇在.aspx頁面中或程序代碼後置檔案中內嵌執行此動作,而不需要繼承自任何類別。 您可以在 頁面中 OnAuthorizeWebPart(WebPartAuthorizationEventArgs) 宣告 控制項方法的 WebPartManager 替代事件處理程式。 如需詳細資訊和範例,請參閱 OnAuthorizeWebPart(WebPartAuthorizationEventArgs) 方法。

另請參閱

適用於