WebPartManager.IsAuthorized 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
判斷 WebPart 或其他伺服器控制項是否可以加入至頁面。
多載
IsAuthorized(WebPart) |
執行會判斷控制項是否獲得授權可加入至頁面的初始步驟。 |
IsAuthorized(Type, String, String, Boolean) |
執行會判斷控制項是否獲得授權可加入至頁面的最終步驟。 |
備註
網頁元件功能彈性的一部分是能夠在執行時間將伺服器控制項新增至網頁。 有許多常見的案例,其中伺服器控制項 (可以是自訂控制項、自訂 WebPart 伺服器控制項、使用者控制項或 ASP.NET 控制項) 。
在下列常見案例中,Web 元件控制項集會嘗試將伺服器控制項新增至頁面,並 IsAuthorized 呼叫 方法來授權它們:
新增伺服器控制項時,請在區域內網頁的標記中 WebPartZoneBase 宣告伺服器控制項。
以程式設計方式將伺服器控制項新增至區域時。
當使用者將伺服器控制項匯入控制項的 Web 元件目錄時。
從個人化資料存放區載入現有的伺服器控制項時。
將伺服器控制項新增至 DeclarativeCatalogPart 控制項時,使其可在伺服器控制項的目錄中使用。
在每個新增控制項的案例中 IsAuthorized ,會呼叫 方法,以確保已符合所有授權準則,以允許新增控制項。 當控制項獲得授權時,通常會新增它,就像沒有篩選案例一樣。 當控制項未獲得授權時,Web 元件控制項集可以根據內容以數種方式回應。 如果不需要通知使用者) ,控制項集可能會以無訊息方式無法新增未經授權的元件 (,它可能會顯示錯誤訊息,或將 類別的 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
為 null
。
範例
下列程式碼範例示範如何從程式碼呼叫 IsAuthorized(WebPart) 方法,以判斷控制項是否有權新增至頁面。
程式碼範例有三個部分:
覆寫 方法的 IsAuthorized 自訂 WebPartManager 控制項。
建立控制項篩選的 WebPart 網頁。
如何執行程式碼範例的說明。
此程式碼範例會使用自訂 WebPartManager 控制項來覆寫 IsAuthorized(Type, String, String, Boolean) 多載方法,以提供 屬性的 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>
enableExport
設定為 true
的專案,如下列標記所示。
<webParts enableExport="true">
...
</webParts>
在瀏覽器中載入頁面之後,請注意會顯示第一個控制項,因為它符合覆寫方法中的準則。 第二個控制項不會新增至頁面,因為篩選會排除它。 也會新增第三個控制項,因為它沒有其 AuthorizationFilter 屬性集。 請注意,如果您按一下任一控制項標題列中的動詞功能表圖示,則可以匯出它們,因為它們 ExportMode 各自的屬性值已指派。
備註
方法是 IsAuthorized Web 元件控制項所呼叫的初始方法,設定為檢查控制項的 WebPart 授權。 它會接受 webPart
做為參數,並開始一個程式,最終判斷控制項是否會新增至頁面。 當您需要判斷指定的控制項是否獲得授權時,請直接從程式碼呼叫這個方法。
這個方法會執行判斷控制項是否繼承自 WebPart 類別或 控制項 GenericWebPart 的初始工作,如果是,則為它所包含的子控制項類型。 若要完成授權工作,它會呼叫 IsAuthorized(Type, String, String, Boolean) 多載方法。
給呼叫者的注意事項
這個方法會直接從您的程式碼呼叫。 如果您想要更充分地控制授權程式,您可以覆寫 IsAuthorized(Type, String, String, Boolean) 多載方法。
另請參閱
- AuthorizationFilter
- AuthorizeWebPart
- OnAuthorizeWebPart(WebPartAuthorizationEventArgs)
- ASP.NET 網頁元件控制項
適用於
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
參數
- path
- String
正在授權之控制項的原始程式檔的相對應用程式路徑,若是使用者控制項。
- authorizationFilter
- String
指定給 AuthorizationFilter 控制項之 WebPart 屬性的任意字串值,用來授權控制項是否可以加入至頁面。
傳回
布林值,指出控制項是否獲得授權,可加入至頁面。
例外狀況
type
為 null
。
範例
下列程式碼範例示範如何覆寫 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
只有在所檢查的控制項是使用者控制項時,才會有值。 然後它會呼叫會引發 AuthorizeWebPart 事件的重要 OnAuthorizeWebPart 方法。
給繼承者的注意事項
如果您想要在檢查授權時提供額外的處理,可以藉由繼承自 WebPartManager 類別來覆寫這個方法。 您可能想要覆寫 方法來檢查 參數中的 authorizationFilter
特定值,並根據值傳回 Boolean 值,以判斷控制項是否要加入頁面。
對於也想要檢查授權篩選器並提供自訂處理的頁面開發人員,可以選擇在 .aspx 頁面或程式碼後置檔案中內嵌執行此動作,而不需要繼承任何類別。 您可以在 控制項的 方法 WebPartManager 頁面中 OnAuthorizeWebPart(WebPartAuthorizationEventArgs) 宣告替代事件處理常式。 如需詳細資訊和範例,請參閱 OnAuthorizeWebPart(WebPartAuthorizationEventArgs) 方法。
另請參閱
- AuthorizationFilter
- AuthorizeWebPart
- OnAuthorizeWebPart(WebPartAuthorizationEventArgs)
- ASP.NET 網頁元件控制項
適用於
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應