PermissionSetAttribute PermissionSetAttribute PermissionSetAttribute PermissionSetAttribute Class

定义

允许对使用声明安全性应用到代码中的 PermissionSet 进行安全操作。Allows security actions for a PermissionSet to be applied to code using declarative security. 此类不能被继承。This class cannot be inherited.

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

示例

下面的示例演示如何使用PermissionSetAttribute类。The following example shows the use of the PermissionSetAttribute Class.

// The #define statement for BuildFile must be included the first time this sample is run.  
// This causes the sample to create a file named 'LocalIntranet.xml' in the c:\temp folder.  
// After creating the LocalInternet.xml file, comment out the #define statement and rerun 
// the sample to demonstrate the use of the permission set attribute.
#define BuildFile
using System;
using System.Security;
using System.Security.Permissions;
using System.Security.Policy;
using System.Collections;
using System.IO;

namespace PermissionSetAttributeDemo
{
    class Class1
    {		
        [STAThread]
        static void Main(string[] args)
        {
            // Run this sample with the BuildFile symbol defined to create the required file, then
            // comment out the #define statement to demonstrate the use of the attribute.
#if(BuildFile)
            using (StreamWriter sw = new StreamWriter("c:\\temp\\LocalIntranet.xml")) 
            {
                sw.WriteLine(GetNamedPermissionSet("LocalIntranet"));
                sw.Close();
            }
#endif
#if(!BuildFile)
            ReadFile1();
            ReadFile2();
            ReadFile3();
            Console.WriteLine("Press the Enter key to exit.");
            Console.Read();
#endif
        }
#if(!BuildFile)
        // Read the LocalIntranet.xml file.
        static void ReadFile1()
        {
            try
            {
                Console.WriteLine("Attempting to read a file using the FullTrust permission set.");
                using (StreamReader sr = new StreamReader("c:\\temp\\LocalIntranet.xml")) 
                {
                    string permissionSet = sr.ReadToEnd();
                    sr.Close();
                }
                Console.WriteLine("The file was successfully read.");
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
        [PermissionSetAttribute(SecurityAction.PermitOnly, File = "c:\\temp\\LocalIntranet.xml")]
            // Read the file with the specified security action on the file path.
        static void ReadFile2()
        {
            try
            {
                Console.WriteLine("Attempting to read a file using the LocalIntranet permission set.");
                using (StreamReader sr = new StreamReader("c:\\temp\\LocalIntranet.xml")) 
                {
                    string permissionSet = sr.ReadToEnd();
                    sr.Close();
                }
                Console.WriteLine("The file was successfully read.");
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
        [PermissionSetAttribute(SecurityAction.PermitOnly, Name = "LocalIntranet")]
            // Read the file with the specified security action on the permission set.
        static void ReadFile3()
        {
            try
            {
                Console.WriteLine("\nSecond attempt to read a file using " + 
                    "the LocalIntranet permission set.");
                using (StreamReader sr = new StreamReader("c:\\temp\\LocalIntranet.xml")) 
                {
                    string permissionSet = sr.ReadToEnd();
                    sr.Close();
                }
                Console.WriteLine("The file was successfully read.");
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
#endif
        // Locate the named permission set at the Machine level and return it as a string value.
        private static string GetNamedPermissionSet(string name)
        {
            IEnumerator policyEnumerator = SecurityManager.PolicyHierarchy();
            // Move through the policy levels to the Machine Level.
            while(policyEnumerator.MoveNext())
            {
                PolicyLevel currentLevel = (PolicyLevel)policyEnumerator.Current;
                if(currentLevel.Label == "Machine")
                {
                    // Iterate through the permission sets at the Machine level.
                    IList namedPermissions = currentLevel.NamedPermissionSets;
                    IEnumerator namedPermission = namedPermissions.GetEnumerator();
                    // Locate the named permission set.
                    while(namedPermission.MoveNext())
                    {
                        if(((NamedPermissionSet)namedPermission.Current).Name == name)
                        {
                            return ((NamedPermissionSet)namedPermission.Current).ToString();
                        }
   
                    }
                }
            }
            return null;
        }
    }
}
//
// This sample produces the following output:
//
// File created at c:\temp\LocalIntranet.xml
// Uncomment the BuildFile=false line and run the sample again.
//
// This sample completed successfully; press Exit to continue.
//
//
// The second time the sample is ran (without DEBUG flag):
//
// Attempting to read a file using the FullTrust permission set.
// The file was successfully read.
// Attempting to read a file using the LocalIntranet permission set.
// Request for the permission of type
// System.Security.Permissions.FileIOPermission, mscorlib, Version=1.0.5000.0,
// Culture=neutral, PublicKeyToken=b77a5c561934e089 failed.
//
// Second attempt to read a file using the LocalIntranet permission set.
// Request for the permission of type System.Security.Permissions.FileIOPermission,
// mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
// failed.
// Press the Enter key to exit.
' The #Const BuildFile = True statement must be active the first time this
' sample is run. This causes the sample to create a file named
' 'LocalIntranet.xml' in the c:\temp folder. After creating the
' LocalInternet.xml file, comment out the #Const BUILDFILE = True statement,
' uncomment the #Const BUILDFILE = False statement, and rerun the sample to
' demonstrate the use of the permission set attribute.
Imports System
Imports System.Security
Imports System.Security.Permissions
Imports System.Security.Policy
Imports System.Collections
Imports System.IO

#Const BUILDFILE = True
'#Const BUILDFILE = False

Public Class Form1
    Inherits System.Windows.Forms.Form

    ' Event handler for Run button.
    <STAThread()> _
        Private Sub Button1_Click( _
            ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles Button1.Click

        tbxOutput.Cursor = Cursors.WaitCursor
        tbxOutput.Text = ""

        Dim xmlFilePath As String
        xmlFilePath = "c:\temp\LocalIntranet.xml"

        ' Run this sample with the BuildFile symbol defined to create the
        ' required file, then comment out the /define statement to demonstrate
        ' the use of the attribute.
#If (BUILDFILE) Then
        Dim sw As New StreamWriter(xmlFilePath)
        Try
            sw.WriteLine(GetNamedPermissionSet("LocalIntranet"))
            WriteLine("File created at " + xmlFilePath)
            WriteLine("Uncomment the BuildFile=false line and " + _
                "run the sample again.")
        Finally
            sw.Close()
        End Try
#End If

#If (Not BUILDFILE) Then
        ReadFile1()
        ReadFile2()
        ReadFile3()
#End If
        ' Align interface and conclude application.
        WriteLine(vbCrLf + "This sample completed successfully;" + _
            " press Exit to continue.")

        ' Reset the cursor.
        tbxOutput.Cursor = Cursors.Default
    End Sub

#If (Not BUILDFILE) Then
    ' Read the LocalIntranet.xml file.
    Private Sub ReadFile1()
        Try
            WriteLine("Attempting to read a file using the FullTrust " + _
                "permission set.")
            Dim sr As New StreamReader("c:\temp\LocalIntranet.xml")
            Try
                Dim permissionSet As String = sr.ReadToEnd()
            Finally
                sr.Close()
            End Try
            WriteLine("The file was successfully read.")
        Catch e As Exception
            WriteLine(e.Message)
        End Try
    End Sub 'ReadFile1

    <System.Security.Permissions.PermissionSetAttribute( _
        SecurityAction.PermitOnly, _
        File:="c:\temp\LocalIntranet.xml")> _
    Private Sub ReadFile2()
        ' Read the file with the specified security action on the file path.
        Try
            WriteLine("Attempting to read a file using the LocalIntranet " + _
                "permission set.")
            Dim sr As New StreamReader("c:\temp\LocalIntranet.xml")
            Try
                Dim permissionSet As String = sr.ReadToEnd()
            Finally
                sr.Close()
            End Try
            WriteLine("The file was successfully read.")
        Catch e As Exception
            WriteLine(e.Message)
        End Try
    End Sub 'ReadFile2

    <System.Security.Permissions.PermissionSetAttribute( _
        SecurityAction.PermitOnly, _
        Name:="LocalIntranet")> _
    Private Sub ReadFile3()
        ' Read the file with the specified security action on the
        ' permission set.
        Try
            WriteLine("Second attempt to read a file using the " + _
                "LocalIntranet permission set.")
            Dim sr As New StreamReader("c:\temp\LocalIntranet.xml")
            Try
                Dim permissionSet As String = sr.ReadToEnd()
            Finally
                sr.Close()
            End Try
            WriteLine("The file was successfully read.")
        Catch e As Exception
            WriteLine(e.Message)
        End Try
    End Sub 'ReadFile3
#End If

    ' Locate the named permission set at the Machine level and return it as
    ' a string value.
    Private Shared Function GetNamedPermissionSet( _
        ByVal name As String) As String

        Dim policyEnumerator As IEnumerator
        policyEnumerator = SecurityManager.PolicyHierarchy()

        ' Move through the policy levels to the Machine Level.
        While policyEnumerator.MoveNext()
            Dim currentLevel As PolicyLevel
            currentLevel = CType(policyEnumerator.Current, PolicyLevel)
            If currentLevel.Label = "Machine" Then
                ' Iterate through the permission sets at the Machine level.
                Dim namedPermissions As IList
                namedPermissions = currentLevel.NamedPermissionSets

                Dim namedPermission As IEnumerator
                namedPermission = namedPermissions.GetEnumerator()

                Dim currentPermission As NamedPermissionSet
                ' Locate the named permission set.
                While namedPermission.MoveNext()
                    currentPermission = CType( _
                        namedPermission.Current, _
                        NamedPermissionSet)

                    If currentPermission.Name.Equals(name) Then
                        Return currentPermission.ToString()
                    End If
                End While
            End If
        End While
        Return Nothing
    End Function

    ' Write specified message and carriage return to the output textbox.
    Private Sub WriteLine(ByVal message As String)
        tbxOutput.AppendText(message + vbCrLf)

    End Sub

    ' Event handler for Exit button.
    Private Sub Button2_Click( _
        ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button2.Click

        Application.Exit()
    End Sub
#Region " Windows Form Designer generated code "

    Public Sub New()
        MyBase.New()

        'This call is required by the Windows Form Designer.
        InitializeComponent()

        'Add any initialization after the InitializeComponent() call

    End Sub

    'Form overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    'Required by the Windows Form Designer
    Private components As System.ComponentModel.IContainer

    'NOTE: The following procedure is required by the Windows Form Designer
    'It can be modified using the Windows Form Designer.  
    'Do not modify it using the code editor.
    Friend WithEvents Panel2 As System.Windows.Forms.Panel
    Friend WithEvents Panel1 As System.Windows.Forms.Panel
    Friend WithEvents Button1 As System.Windows.Forms.Button
    Friend WithEvents Button2 As System.Windows.Forms.Button
    Friend WithEvents tbxOutput As System.Windows.Forms.RichTextBox
    <System.Diagnostics.DebuggerStepThrough()> _
    Private Sub InitializeComponent()
        Me.Panel2 = New System.Windows.Forms.Panel
        Me.Button1 = New System.Windows.Forms.Button
        Me.Button2 = New System.Windows.Forms.Button
        Me.Panel1 = New System.Windows.Forms.Panel
        Me.tbxOutput = New System.Windows.Forms.RichTextBox
        Me.Panel2.SuspendLayout()
        Me.Panel1.SuspendLayout()
        Me.SuspendLayout()
        '
        'Panel2
        '
        Me.Panel2.Controls.Add(Me.Button1)
        Me.Panel2.Controls.Add(Me.Button2)
        Me.Panel2.Dock = System.Windows.Forms.DockStyle.Bottom
        Me.Panel2.DockPadding.All = 20
        Me.Panel2.Location = New System.Drawing.Point(0, 320)
        Me.Panel2.Name = "Panel2"
        Me.Panel2.Size = New System.Drawing.Size(616, 64)
        Me.Panel2.TabIndex = 1
        '
        'Button1
        '
        Me.Button1.Dock = System.Windows.Forms.DockStyle.Right
        Me.Button1.Font = New System.Drawing.Font( _
            "Microsoft Sans Serif", _
            9.0!, _
            System.Drawing.FontStyle.Regular, _
            System.Drawing.GraphicsUnit.Point, _
            CType(0, Byte))
        Me.Button1.Location = New System.Drawing.Point(446, 20)
        Me.Button1.Name = "Button1"
        Me.Button1.Size = New System.Drawing.Size(75, 24)
        Me.Button1.TabIndex = 2
        Me.Button1.Text = "&Run"
        '
        'Button2
        '
        Me.Button2.Dock = System.Windows.Forms.DockStyle.Right
        Me.Button2.Font = New System.Drawing.Font( _
            "Microsoft Sans Serif", _
            9.0!, _
            System.Drawing.FontStyle.Regular, _
            System.Drawing.GraphicsUnit.Point, _
            CType(0, Byte))
        Me.Button2.Location = New System.Drawing.Point(521, 20)
        Me.Button2.Name = "Button2"
        Me.Button2.Size = New System.Drawing.Size(75, 24)
        Me.Button2.TabIndex = 3
        Me.Button2.Text = "E&xit"
        '
        'Panel1
        '
        Me.Panel1.Controls.Add(Me.tbxOutput)
        Me.Panel1.Dock = System.Windows.Forms.DockStyle.Fill
        Me.Panel1.DockPadding.All = 20
        Me.Panel1.Location = New System.Drawing.Point(0, 0)
        Me.Panel1.Name = "Panel1"
        Me.Panel1.Size = New System.Drawing.Size(616, 320)
        Me.Panel1.TabIndex = 2
        '
        'tbxOutput
        '
        Me.tbxOutput.AccessibleDescription = _
            "Displays output from application."
        Me.tbxOutput.AccessibleName = "Output textbox."
        Me.tbxOutput.Dock = System.Windows.Forms.DockStyle.Fill
        Me.tbxOutput.Location = New System.Drawing.Point(20, 20)
        Me.tbxOutput.Name = "tbxOutput"
        Me.tbxOutput.Size = New System.Drawing.Size(576, 280)
        Me.tbxOutput.TabIndex = 1
        Me.tbxOutput.Text = "Click the Run button to run the application."
        '
        'Form1
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(6, 15)
        Me.ClientSize = New System.Drawing.Size(616, 384)
        Me.Controls.Add(Me.Panel1)
        Me.Controls.Add(Me.Panel2)
        Me.Name = "Form1"
        Me.Text = "PermisstionSetAttribute"
        Me.Panel2.ResumeLayout(False)
        Me.Panel1.ResumeLayout(False)
        Me.ResumeLayout(False)

    End Sub

#End Region
End Class
'
' This sample produces the following output:
'
' File created at c:\temp\LocalIntranet.xml
' Uncomment the BuildFile=false line and run the sample again.
'
' This sample completed successfully; press Exit to continue.
'
'
' The second time the sample is ran (without DEBUG flag):
'
' Attempting to read a file using the FullTrust permission set.
' The file was successfully read.
' Attempting to read a file using the LocalIntranet permission set.
' Request for the permission of type
' System.Security.Permissions.FileIOPermission, mscorlib, Version=1.0.5000.0,
' Culture=neutral, PublicKeyToken=b77a5c561934e089 failed.
'
' Second attempt to read a file using the LocalIntranet permission set.
' Request for the permission of type System.Security.Permissions.FileIOPermission,
' mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
' failed.
' This sample completed successfully; press Exit to continue.

注解

PermissionSetAttribute属性NameFile,和XML是互斥的这意味着一个权限集可以包含作为其源以下之一: 命名的权限集,包含的 XML 表示形式的文件设置权限,或设置包含权限的 XML 表示形式的字符串。The PermissionSetAttribute properties Name, File, and XML are mutually exclusive, meaning that a permission set can have as its source only one of the following: a named permission set, a file containing an XML representation of a permission set, or a string containing an XML representation of a permission set.

声明是允许的范围取决于SecurityAction的使用。The scope of the declaration that is allowed depends on the SecurityAction that is used. 一个SecurityAction上执行PermissionSet是每个集内的权限执行该操作的等效项。A SecurityAction performed on a PermissionSet is the equivalent of performing that action on each of the permissions within the set.

声明的安全特性的安全信息的属性目标的元数据中的存储,以及在运行时访问系统。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.

构造函数

PermissionSetAttribute(SecurityAction) PermissionSetAttribute(SecurityAction) PermissionSetAttribute(SecurityAction) PermissionSetAttribute(SecurityAction)

使用指定的安全操作初始化 PermissionSetAttribute 类的新实例。Initializes a new instance of the PermissionSetAttribute class with the specified security action.

属性

Action Action Action Action

获取或设置安全性操作。Gets or sets a security action.

(Inherited from SecurityAttribute)
File File File File

获取或设置一个文件,该文件包含要声明的自定义权限集的 XML 表示形式。Gets or sets a file containing the XML representation of a custom permission set to be declared.

Hex Hex Hex Hex

获取或设置 XML 编码的权限集的十六进制表示形式。Gets or sets the hexadecimal representation of the XML encoded permission set.

Name Name Name Name

获取或设置权限集的名称。Gets or sets the name of the permission set.

TypeId TypeId TypeId TypeId

在派生类中实现时,获取此 Attribute 的唯一标识符。When implemented in a derived class, gets a unique identifier for this Attribute.

(Inherited from Attribute)
UnicodeEncoded UnicodeEncoded UnicodeEncoded UnicodeEncoded

获取或设置一个值,该值指示 File 所指定的文件是 Unicode 编码还是 ASCII 编码。Gets or sets a value indicating whether the file specified by File is Unicode or ASCII encoded.

Unrestricted Unrestricted Unrestricted Unrestricted

获取或设置一个值,该值指示是否声明了对受该特性保护的资源有完全(无限制的)权限。Gets or sets a value indicating whether full (unrestricted) permission to the resource protected by the attribute is declared.

(Inherited from SecurityAttribute)
XML XML XML XML

获取或设置权限集的 XML 表示形式。Gets or sets the XML representation of a permission set.

方法

CreatePermission() CreatePermission() CreatePermission() CreatePermission()

未使用此方法。This method is not used.

CreatePermissionSet() CreatePermissionSet() CreatePermissionSet() CreatePermissionSet()

创建并返回基于此权限集特性对象的新权限集。Creates and returns a new permission set based on this permission set attribute object.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

返回一个值,该值指示此实例是否与指定的对象相等。Returns a value that indicates whether this instance is equal to a specified object.

(Inherited from Attribute)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

返回此实例的哈希代码。Returns the hash code for this instance.

(Inherited from Attribute)
GetType() GetType() GetType() GetType()

获取当前实例的 TypeGets the Type of the current instance.

(Inherited from Object)
IsDefaultAttribute() IsDefaultAttribute() IsDefaultAttribute() IsDefaultAttribute()

在派生类中重写时,指示此实例的值是否是派生类的默认值。When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

(Inherited from Attribute)
Match(Object) Match(Object) Match(Object) Match(Object)

当在派生类中重写时,返回一个指示此实例是否等于指定对象的值。When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

(Inherited from Attribute)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

创建当前 Object 的浅表副本。Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

返回表示当前对象的字符串。Returns a string that represents the current object.

(Inherited from Object)

显式界面实现

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

将一组名称映射为对应的一组调度标识符。Maps a set of names to a corresponding set of dispatch identifiers.

(Inherited from Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

检索对象的类型信息,然后可以使用该信息获取接口的类型信息。Retrieves the type information for an object, which can be used to get the type information for an interface.

(Inherited from Attribute)
_Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32)

检索对象提供的类型信息接口的数量(0 或 1)。Retrieves the number of type information interfaces that an object provides (either 0 or 1).

(Inherited from Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

提供对某一对象公开的属性和方法的访问。Provides access to properties and methods exposed by an object.

(Inherited from Attribute)

适用于

另请参阅