Share via


PrincipalPermission 類別

定義

警告

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
屬性
實作

範例

下列範例需要作用中主體為系統管理員。 參數 namenull,可讓系統管理員的任何用戶傳遞需求。

注意

在 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使用角色字串將會符合任何角色。 藉由隱含,傳遞 nullnamerole 的參數 PrincipalPermission 會符合任何 IPrincipal中的身分識別和角色。 您也可以建構 PrincipalPermission ,只判斷 IIdentity 是否代表已驗證或未驗證的實體。 在這裡情況下, name 會忽略 和 role

不同於大部分的其他許可權, PrincipalPermission 不會擴充 CodeAccessPermission。 不過,它會實作 IPermission 介面。 這是因為 PrincipalPermission 不是因為 不是因為程式代碼訪問許可權,也就是說,不會根據執行元件的身分識別來授與它。 相反地,它允許程式代碼針對目前使用者身分識別執行動作 (DemandUnionIntersect) 等等,以符合這些動作執行程式碼存取和程式碼身分識別許可權的方式。

重要

在要求主體權限之前,必須將目前的應用程式域主體原則設定為列舉值 WindowsPrincipal。 根據預設,主體原則會設定為 UnauthenticatedPrincipal。 如果您未將主體原則設定為 WindowsPrincipal,則主體許可權的需求將會失敗。 在要求主體許可權之前,應該先執行下列程序代碼:

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal).

建構函式

PrincipalPermission(PermissionState)
已淘汰.

使用指定的 PrincipalPermission 初始化 PermissionState 類別的新執行個體。

PrincipalPermission(String, String)
已淘汰.

為指定的 namerole 初始化 PrincipalPermission 類別的新執行個體。

PrincipalPermission(String, String, Boolean)
已淘汰.

針對指定的 namerole 和驗證狀態,初始化 PrincipalPermission 類別的新執行個體。

方法

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)
已淘汰.

建立目前權限與指定權限聯集的權限。

適用於

另請參閱