PrincipalPermission 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
警告
Code Access Security is not supported or honored by the runtime.
允許針對使用中的主體進行檢查 (請參閱 IPrincipal),方法是使用為宣告式和命令式安全性動作所定義的語言建構。 此類別無法獲得繼承。
public ref class PrincipalPermission sealed : System::Security::IPermission, System::Security::Permissions::IUnrestrictedPermission
[System.Obsolete("Code Access Security is not supported or honored by the runtime.", DiagnosticId="SYSLIB0003", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public sealed class PrincipalPermission : System.Security.IPermission, System.Security.Permissions.IUnrestrictedPermission
[System.Serializable]
public sealed class PrincipalPermission : System.Security.IPermission, System.Security.Permissions.IUnrestrictedPermission
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class PrincipalPermission : System.Security.IPermission, System.Security.Permissions.IUnrestrictedPermission
public sealed class PrincipalPermission : System.Security.IPermission, System.Security.Permissions.IUnrestrictedPermission
[<System.Obsolete("Code Access Security is not supported or honored by the runtime.", DiagnosticId="SYSLIB0003", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
type PrincipalPermission = class
interface IPermission
interface ISecurityEncodable
interface IUnrestrictedPermission
[<System.Serializable>]
type PrincipalPermission = class
interface IPermission
interface IUnrestrictedPermission
interface ISecurityEncodable
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type PrincipalPermission = class
interface IPermission
interface IUnrestrictedPermission
interface ISecurityEncodable
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type PrincipalPermission = class
interface IPermission
interface ISecurityEncodable
interface IUnrestrictedPermission
type PrincipalPermission = class
interface IPermission
interface ISecurityEncodable
interface IUnrestrictedPermission
Public NotInheritable Class PrincipalPermission
Implements IPermission, IUnrestrictedPermission
- 繼承
-
PrincipalPermission
- 屬性
- 實作
範例
下列範例需要作用中主體為系統管理員。 參數 name
為 null
,可讓系統管理員的任何用戶傳遞需求。
注意
在 Windows Vista 中,使用者帳戶控制 (UAC) 會判斷使用者的權限。 如果您是內建 Administrators 群組的成員,系統會將兩個執行階段存取語彙基元 (Token) 指派給您:標準使用者存取語彙基元及管理員存取語彙基元。 根據預設,您會屬於標準使用者角色。 若要執行需要您是系統管理員的程式碼,您必須先將權限從標準使用者提高為系統管理員。 您可以在啟動應用程式時,以滑鼠右鍵按一下應用程式圖示,並指出您想要以系統管理員身分執行,藉此提高為系統管理員權限。
using namespace System;
using namespace System::Security;
using namespace System::Security::Permissions;
using namespace System::Security::Policy;
using namespace System::Security::Principal;
int main(array<System::String ^> ^args)
{
System::String^ null;
AppDomain::CurrentDomain->SetPrincipalPolicy(PrincipalPolicy::WindowsPrincipal);
PrincipalPermission^ principalPerm = gcnew PrincipalPermission(null, "Administrators" );
principalPerm->Demand();
Console::WriteLine("Demand succeeded");
return 0;
}
using System;
using System.Threading;
using System.Security.Permissions;
using System.Security.Principal;
class SecurityPrincipalDemo
{
public static void Main()
{
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
PrincipalPermission principalPerm = new PrincipalPermission(null, "Administrators");
principalPerm.Demand();
Console.WriteLine("Demand succeeded.");
}
}
Imports System.Threading
Imports System.Security.Permissions
Imports System.Security.Principal
Class SecurityPrincipalDemo
Public Shared Sub Main()
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal)
Dim principalPerm As New PrincipalPermission(Nothing, "Administrators")
principalPerm.Demand()
Console.WriteLine("Demand succeeded.")
End Sub
End Class
備註
警告
程式代碼存取安全性 (CAS) 在所有版本的 .NET Framework 和 .NET 中已被取代。 使用 CAS 相關 API 時,最新版本的 .NET 不會接受 CAS 批注,併產生錯誤。 開發人員應尋求替代方案來完成安全性工作。
藉由將身分識別資訊 (用戶名稱和角色) 傳遞至建構函式, PrincipalPermission 可用來要求使用中主體的身分識別符合這項資訊。
若要比對作用 IPrincipal 中和相關聯的 IIdentity,指定的身分識別和角色都必須相符。 如果使用 null
識別字串,則會將其解譯為符合任何身分識別的要求。
null
使用角色字串將會符合任何角色。 藉由隱含,傳遞 null
name
或 role
的參數 PrincipalPermission 會符合任何 IPrincipal中的身分識別和角色。 您也可以建構 PrincipalPermission ,只判斷 IIdentity 是否代表已驗證或未驗證的實體。 在這裡情況下, name
會忽略 和 role
。
不同於大部分的其他許可權, PrincipalPermission 不會擴充 CodeAccessPermission。 不過,它會實作 IPermission 介面。 這是因為 PrincipalPermission 不是因為 不是因為程式代碼訪問許可權,也就是說,不會根據執行元件的身分識別來授與它。 相反地,它允許程式代碼針對目前使用者身分識別執行動作 (Demand、 Union、 Intersect) 等等,以符合這些動作執行程式碼存取和程式碼身分識別許可權的方式。
重要
在要求主體權限之前,必須將目前的應用程式域主體原則設定為列舉值 WindowsPrincipal。 根據預設,主體原則會設定為 UnauthenticatedPrincipal。 如果您未將主體原則設定為 WindowsPrincipal,則主體許可權的需求將會失敗。 在要求主體許可權之前,應該先執行下列程序代碼:
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal).
建構函式
PrincipalPermission(PermissionState) |
已淘汰.
使用指定的 PrincipalPermission 初始化 PermissionState 類別的新執行個體。 |
PrincipalPermission(String, String) |
已淘汰.
為指定的 |
PrincipalPermission(String, String, Boolean) |
已淘汰.
針對指定的 |
方法
Copy() |
已淘汰.
建立並傳回目前權限的相同複本。 |
Demand() |
已淘汰.
在執行階段判斷目前的主體是否符合目前權限所指定的主體。 |
Equals(Object) |
已淘汰.
判斷指定的 PrincipalPermission 物件是否等於目前的 PrincipalPermission。 |
Equals(Object) |
已淘汰.
判斷指定的物件是否等於目前的物件。 (繼承來源 Object) |
FromXml(SecurityElement) |
已淘汰.
透過 XML 編碼,重新建構具有指定狀態的權限。 |
GetHashCode() |
已淘汰.
取得 PrincipalPermission 物件的雜湊碼,其適合用於雜湊表這類的雜湊演算法和資料結構。 |
GetHashCode() |
已淘汰.
做為預設雜湊函式。 (繼承來源 Object) |
GetType() |
已淘汰.
取得目前執行個體的 Type。 (繼承來源 Object) |
Intersect(IPermission) |
已淘汰.
建立並傳回目前權限與指定權限交集的權限。 |
IsSubsetOf(IPermission) |
已淘汰.
判斷目前權限是否為指定權限的子集。 |
IsUnrestricted() |
已淘汰.
傳回值,指出目前的權限是否不受限制。 |
MemberwiseClone() |
已淘汰.
建立目前 Object 的淺層複製。 (繼承來源 Object) |
ToString() |
已淘汰.
建立並傳回表示目前權限的字串。 |
ToXml() |
已淘汰.
建立權限和其目前狀態的 XML 編碼方式。 |
Union(IPermission) |
已淘汰.
建立目前權限與指定權限聯集的權限。 |