PrincipalPermissionAttribute クラス

定義

PrincipalPermission のセキュリティ アクションを、宣言セキュリティを使用してコードに適用できるようにします。Allows security actions for PrincipalPermission to be applied to code using declarative security. このクラスは継承できません。This class cannot be inherited.

public ref class PrincipalPermissionAttribute sealed : System::Security::Permissions::CodeAccessSecurityAttribute
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Method, AllowMultiple=true, Inherited=false)]
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public sealed class PrincipalPermissionAttribute : System.Security.Permissions.CodeAccessSecurityAttribute
type PrincipalPermissionAttribute = class
    inherit CodeAccessSecurityAttribute
Public NotInheritable Class PrincipalPermissionAttribute
Inherits CodeAccessSecurityAttribute
継承
属性

次の例では、PrincipalPermissionAttribute クラスを宣言によって使用して、現在のユーザーが管理者であることを要求する方法を示します。The following example demonstrates how the PrincipalPermissionAttribute class is used declaratively to demand that the current user be an administrator.

注意

Windows Vista では、ユーザー アカウント制御 (UAC: User Account Control) でユーザーの権限が決定されます。In Windows Vista, User Account Control (UAC) determines the privileges of a user. ユーザーが組み込みの Administrators グループのメンバーである場合、そのユーザーには標準ユーザー アクセス トークンおよび管理者アクセス トークンの 2 つのランタイム アクセス トークンが割り当てられています。If you are a member of the Built-in Administrators group, you are assigned two run-time access tokens: a standard user access token and an administrator access token. 既定では、ユーザーは標準ユーザー ロールに所属します。By default, you are in the standard user role. 管理者であることを要求するコードを実行するには、最初に、ユーザーの権限を標準ユーザーから管理者に昇格させる必要があります。To execute the code that requires you to be an administrator, you must first elevate your privileges from standard user to administrator. この操作は、アプリケーションの起動時にアプリケーション アイコンを右クリックし、管理者として実行することを指定して行うことができます。You can do this when you start an application by right-clicking the application icon and indicating that you want to run as an administrator.

using namespace System;
using namespace System::Security;
using namespace System::Security::Permissions;
using namespace System::Security::Policy;
using namespace System::Security::Principal;

[PrincipalPermission(SecurityAction::Demand, Role = "Administrators")]
void CheckAdministrator()
{
    Console::WriteLine("User is an administrator.");
}
int main(array<System::String ^> ^args)
{
    try
    {
        // Must set PrincipalPolicy to WindowsPrincipal
        AppDomain::CurrentDomain->SetPrincipalPolicy(PrincipalPolicy::WindowsPrincipal);
        // Check using declarative security.
        CheckAdministrator();
        // Check using Imperative security.
        System::String^ null;
        PrincipalPermission^ principalPerm = gcnew PrincipalPermission(null, "Administrators" );
        principalPerm->Demand();
        Console::WriteLine("Demand succeeded");
    }
    catch (Exception ^e)
    {
        Console::WriteLine(e->Message);
    }
    return 0;
}


using System;
using System.Threading;
using System.Security.Permissions;
using System.Security.Principal;

class SecurityPrincipalDemo
{
    public static void Main()
    {
        try
        {
            // PrincipalPolicy must be set to WindowsPrincipal to check roles.
            AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
            // Check using the PrincipalPermissionAttribute
            CheckAdministrator();
            // Check using PrincipalPermission class.
            PrincipalPermission principalPerm = new PrincipalPermission(null, "Administrators");
            principalPerm.Demand();
            Console.WriteLine("Demand succeeded.");
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
    }
    [PrincipalPermission(SecurityAction.Demand, Role = "Administrators")]
    static void CheckAdministrator()
    {
        Console.WriteLine("User is an administrator");
    }
}
Imports System.Threading
Imports System.Security.Permissions
Imports System.Security.Principal



Class SecurityPrincipalDemo

    Public Shared Sub Main()
        Try
            ' PrincipalPolicy must be set to WindowsPrincipal to check roles.
            AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal)
            ' Check using the PrincipalPermissionAttribute
            CheckAdministrator()
            ' Check using PrincipalPermission class.
            Dim principalPerm As New PrincipalPermission(Nothing, "Administrators")
            principalPerm.Demand()
            Console.WriteLine("Demand succeeded.")
        Catch e As Exception
            Console.WriteLine(e.Message)
        End Try

    End Sub

    <PrincipalPermission(SecurityAction.Demand, Role:="Administrators")> _
    Shared Sub CheckAdministrator()
        Console.WriteLine("User is an administrator")

    End Sub
End Class

注釈

重要

部分的に信頼されたコードはサポートされなくなりました。Partially trusted code is no longer supported. この属性は、.NET Core には影響しません。This attribute has no effect in .NET Core.

PrincipalPermissionAttribute を使用すると、コードを実行しているユーザーが指定されたロールに属しているか、認証されていることを宣言によって要求できます。PrincipalPermissionAttribute can be used to declaratively demand that users running your code belong to a specified role or have been authenticated. Unrestricted を使用すると、Authenticatedtrue に設定し、Name Role に設定された PrincipalPermission を作成します。nullUse of Unrestricted creates a PrincipalPermission with Authenticated set to true and Name and Role set to null.

許可される宣言のスコープは、使用される SecurityAction によって異なります。The scope of the declaration that is allowed depends on the SecurityAction that is used. PrincipalPermissionAttribute をアセンブリレベルで適用することはできません。PrincipalPermissionAttribute cannot be applied at the assembly level.

セキュリティ属性によって宣言されたセキュリティ情報は、属性ターゲットのメタデータに格納され、実行時にシステムによってアクセスされます。The security information declared by a security attribute is stored in the metadata of the attribute target and is accessed by the system at run time. セキュリティ属性は、宣言セキュリティに対してのみ使用されます。Security attributes are used only for declarative security. 命令型のセキュリティについては、対応するアクセス許可クラスを使用します。For imperative security, use the corresponding permission class.

重要

このクラスを使用してプリンシパルのアクセス許可を要求する前に、現在のアプリケーションドメインのプリンシパルポリシーを WindowsPrincipal列挙値に設定する必要があります。Before you use this class to demand principal permission, you must set the current application domain's principal policy to the enumeration value WindowsPrincipal. 既定では、プリンシパルポリシーは UnauthenticatedPrincipalに設定されています。By default, the principal policy is set to UnauthenticatedPrincipal. プリンシパルポリシーを WindowsPrincipalに設定しなかった場合、プリンシパルのアクセス許可に対する要求は失敗します。If you do not set the principal policy to WindowsPrincipal, a demand for principal permission will fail. プリンシパルのアクセス許可が要求される前に、次のコードを実行する必要があります: AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal).The following code should be executed before the principal permission is demanded: AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal).

コンストラクター

PrincipalPermissionAttribute(SecurityAction)

指定された PrincipalPermissionAttribute を使用して SecurityAction クラスの新しいインスタンスを初期化します。Initializes a new instance of the PrincipalPermissionAttribute class with the specified SecurityAction.

プロパティ

Action

セキュリティ アクションを取得または設定します。Gets or sets a security action.

(継承元 SecurityAttribute)
Authenticated

現在のプリンシパルが、基になるロール ベース セキュリティ プロバイダーによって認証されているかどうかを示す値を取得するか、設定します。Gets or sets a value indicating whether the current principal has been authenticated by the underlying role-based security provider.

Name

現在のプリンシパルに関連付けられた ID の名前を取得または設定します。Gets or sets the name of the identity associated with the current principal.

Role

指定されたセキュリティ ロールのメンバーシップを取得または設定します。Gets or sets membership in a specified security role.

TypeId

派生クラスで実装されると、この Attribute の一意の識別子を取得します。When implemented in a derived class, gets a unique identifier for this Attribute.

(継承元 Attribute)
Unrestricted

属性によって保護されているリソースに対して完全な (無制限の) アクセス許可が宣言されているかどうかを示す値を取得または設定します。Gets or sets a value indicating whether full (unrestricted) permission to the resource protected by the attribute is declared.

(継承元 SecurityAttribute)

メソッド

CreatePermission()

新しい PrincipalPermission を作成して返します。Creates and returns a new PrincipalPermission.

Equals(Object)

このインスタンスが、指定されたオブジェクトと等価であるかどうかを示す値を返します。Returns a value that indicates whether this instance is equal to a specified object.

(継承元 Attribute)
GetHashCode()

このインスタンスのハッシュ コードを返します。Returns the hash code for this instance.

(継承元 Attribute)
GetType()

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(継承元 Object)
IsDefaultAttribute()

派生クラスでオーバーライドされるとき、このインスタンスの値が派生クラスの既定値であるかどうかを示します。When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

(継承元 Attribute)
Match(Object)

派生クラス内でオーバーライドされたときに、指定したオブジェクトとこのインスタンスが等しいかどうかを示す値を返します。When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

(継承元 Attribute)
MemberwiseClone()

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(継承元 Object)
ToString()

現在のオブジェクトを表す string を返します。Returns a string that represents the current object.

(継承元 Object)

明示的なインターフェイスの実装

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

一連の名前を対応する一連のディスパッチ識別子に割り当てます。Maps a set of names to a corresponding set of dispatch identifiers.

(継承元 Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

オブジェクトの型情報を取得します。この情報はインターフェイスの型情報の取得に使用できます。Retrieves the type information for an object, which can be used to get the type information for an interface.

(継承元 Attribute)
_Attribute.GetTypeInfoCount(UInt32)

オブジェクトが提供する型情報インターフェイスの数 (0 または 1) を取得します。Retrieves the number of type information interfaces that an object provides (either 0 or 1).

(継承元 Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

オブジェクトによって公開されたプロパティおよびメソッドへのアクセスを提供します。Provides access to properties and methods exposed by an object.

(継承元 Attribute)

適用対象

こちらもご覧ください