Share via


ResourcePermissionBase 类

允许控制代码访问安全权限。

**命名空间:**System.Security.Permissions
**程序集:**System(在 system.dll 中)

语法

声明
<SerializableAttribute> _
Public MustInherit Class ResourcePermissionBase
    Inherits CodeAccessPermission
    Implements IUnrestrictedPermission
用法
Dim instance As ResourcePermissionBase
[SerializableAttribute] 
public abstract class ResourcePermissionBase : CodeAccessPermission, IUnrestrictedPermission
[SerializableAttribute] 
public ref class ResourcePermissionBase abstract : public CodeAccessPermission, IUnrestrictedPermission
/** @attribute SerializableAttribute() */ 
public abstract class ResourcePermissionBase extends CodeAccessPermission implements IUnrestrictedPermission
SerializableAttribute 
public abstract class ResourcePermissionBase extends CodeAccessPermission implements IUnrestrictedPermission

备注

提示

ResourcePermissionBase 类使用序号排序规则对字符串进行比较,同时忽略被比较字符串的大小写。

给继承者的说明 当从 ResourcePermissionBase 继承时,必须至少提供三个构造函数,设置两个属性并提供第三个属性。所需的构造函数为:默认构造函数、采用 PermissionState 作为参数的构造函数以及足够多的采用属性值作为参数的构造函数。需要设置的属性为 PermissionAccessTypeTagNames。所需的第三个属性是返回权限项的属性。有关此类的实现示例,请参见 PerformanceCounterPermission。在 PerformanceCounterPermission 中,TagNames 属性被专门设置为“Machine”和“Category”,PermissionAccessType 属性被专门设置为 PerformanceCounterPermissionAccess 的类型,并且 PermissionEntries 属性返回权限项。

示例

下面的示例从 ResourcePermissionBase 类继承。实现了四种构造函数。示例还提供一个名为 MailslotPermissionEntry 的类的实现。然后,将 PermissionAccessType 属性以私有方式设置为 MailslotPermissionEntry 的类型。TagNames 属性以私有方式设置为“Name”和“Machine”。

Imports System
Imports System.Security.Permissions
Imports System.Collections

<Serializable()> Public Class MailslotPermission
    Inherits ResourcePermissionBase

    Private innerCollection As ArrayList


    Public Sub New()
        SetNames()
    End Sub 'New


    Public Sub New(ByVal state As PermissionState)
        MyBase.New(state)
        SetNames()
    End Sub 'New


    Public Sub New(ByVal permissionAccess As MailslotPermissionAccess, ByVal name As String, ByVal machineName1 As String)
        SetNames()
        Me.AddPermissionAccess(New MailslotPermissionEntry(permissionAccess, name, machineName1))
    End Sub 'New


    Public Sub New(ByVal permissionAccessEntries() As MailslotPermissionEntry)
        SetNames()
        If permissionAccessEntries Is Nothing Then
            Throw New ArgumentNullException("permissionAccessEntries")
        End If
        Dim index As Integer

        While index < permissionAccessEntries.Length
            Me.AddPermissionAccess(permissionAccessEntries(index))
        End While
    End Sub 'New 

    Public ReadOnly Property PermissionEntries() As ArrayList
        Get
            If Me.innerCollection Is Nothing Then
                Me.innerCollection = New ArrayList()
            End If
            Me.innerCollection.InsertRange(0, MyBase.GetPermissionEntries())

            Return Me.innerCollection
        End Get
    End Property


    Friend Overloads Sub AddPermissionAccess(ByVal entry As MailslotPermissionEntry)
        MyBase.AddPermissionAccess(entry.GetBaseEntry())
    End Sub 'AddPermissionAccess


    Friend Shadows Sub Clear()
        MyBase.Clear()
    End Sub 'Clear


    Friend Overloads Sub RemovePermissionAccess(ByVal entry As MailslotPermissionEntry)
        MyBase.RemovePermissionAccess(entry.GetBaseEntry())
    End Sub 'RemovePermissionAccess


    Private Sub SetNames()
        Me.PermissionAccessType = GetType(MailslotPermissionAccess)
        Me.TagNames = New String() {"Name", "Machine"}
    End Sub 'SetNames
End Class 'MailslotPermission

<Flags()> Public Enum MailslotPermissionAccess
    None = 0
    Send = 2
    Receive = 4 Or Send
End Enum 'MailslotPermissionAccess

<Serializable()> Public Class MailslotPermissionEntry
    Private nameVar As String
    Private machineNameVar As String
    Private permissionAccessVar As MailslotPermissionAccess


    Public Sub New(ByVal permissionAccess As MailslotPermissionAccess, ByVal name As String, ByVal machineName1 As String)
        Me.permissionAccessVar = permissionAccess
        Me.nameVar = name
        Me.machineNameVar = machineName1
    End Sub 'New


    Friend Sub New(ByVal baseEntry As ResourcePermissionBaseEntry)
        Me.permissionAccessVar = CType(baseEntry.PermissionAccess, MailslotPermissionAccess)
        Me.nameVar = baseEntry.PermissionAccessPath(0)
        Me.machineNameVar = baseEntry.PermissionAccessPath(1)
    End Sub 'New


    Public ReadOnly Property Name() As String
        Get
            Return Me.nameVar
        End Get
    End Property


    Public ReadOnly Property MachineName() As String
        Get
            Return Me.machineNameVar
        End Get
    End Property


    Public ReadOnly Property PermissionAccess() As MailslotPermissionAccess
        Get
            Return Me.permissionAccessVar
        End Get
    End Property


    Friend Function GetBaseEntry() As ResourcePermissionBaseEntry
        Dim baseEntry As New ResourcePermissionBaseEntry(CInt(Me.PermissionAccess), New String() {Me.Name, Me.MachineName})
        Return baseEntry
    End Function 'GetBaseEntry


End Class 'MailslotPermissionEntry
using System;        
using System.Security.Permissions;  
using System.Collections;

[Serializable()]
public class MailslotPermission: ResourcePermissionBase
{
 
    private ArrayList innerCollection;

    public MailslotPermission() 
    {
        SetNames();
    }                                                                

    public MailslotPermission(PermissionState state):base(state)
    {
        SetNames();
    }  

    public MailslotPermission(MailslotPermissionAccess permissionAccess, string name, string machineName)
    {
        SetNames();
        this.AddPermissionAccess(new MailslotPermissionEntry(permissionAccess, name, machineName));              
    }

    public MailslotPermission(MailslotPermissionEntry[] permissionAccessEntries) 
    {
        SetNames();
        if (permissionAccessEntries == null)
            throw new ArgumentNullException("permissionAccessEntries");
      
        for (int index = 0; index < permissionAccessEntries.Length; ++index)
            this.AddPermissionAccess(permissionAccessEntries[index]);                          
    }

    public ArrayList PermissionEntries 
    {
        get 
        {
            if (this.innerCollection == null)                     
                this.innerCollection = new ArrayList();
            this.innerCollection.InsertRange(0,base.GetPermissionEntries()); 

            return this.innerCollection;                                                               
        }
    }

    internal void AddPermissionAccess(MailslotPermissionEntry entry) 
    {
        base.AddPermissionAccess(entry.GetBaseEntry());
    }

    internal new void Clear() 
    {
        base.Clear();
    }

    internal void RemovePermissionAccess(MailslotPermissionEntry entry) 
    {
        base.RemovePermissionAccess(entry.GetBaseEntry());
    }

    private void SetNames() 
    {
        this.PermissionAccessType = typeof(MailslotPermissionAccess);
        this.TagNames = new string[]{"Name","Machine"};
    }                                
}

[Flags]         
public enum MailslotPermissionAccess 
{
    None = 0,
    Send = 1 << 1,
    Receive = 1 << 2 | Send,
} 

[Serializable()]     
public class MailslotPermissionEntry 
{
    private string name;
    private string machineName;
    private MailslotPermissionAccess permissionAccess;

    public MailslotPermissionEntry(MailslotPermissionAccess permissionAccess, string name, string machineName) 
    {
        this.permissionAccess = permissionAccess;
        this.name = name;
        this.machineName = machineName;
    }  

    internal MailslotPermissionEntry(ResourcePermissionBaseEntry baseEntry) 
    {
        this.permissionAccess = (MailslotPermissionAccess)baseEntry.PermissionAccess;
        this.name = baseEntry.PermissionAccessPath[0]; 
        this.machineName = baseEntry.PermissionAccessPath[1]; 
    }

    public string Name 
    {
        get 
        {                
            return this.name;                
        }                        
    }

    public string MachineName 
    {
        get 
        {                
            return this.machineName;                
        }                        
    }

    public MailslotPermissionAccess PermissionAccess 
    {
        get 
        {
            return this.permissionAccess;
        }                        
    }      

    internal ResourcePermissionBaseEntry GetBaseEntry() 
    {
        ResourcePermissionBaseEntry baseEntry = new ResourcePermissionBaseEntry((int)this.PermissionAccess, new string[] {this.Name,this.MachineName});            
        return baseEntry;
    }

}
#using <System.dll>

using namespace System;
using namespace System::Security::Permissions;
using namespace System::Collections;

[Flags]

public enum class MailslotPermissionAccess
{
   None = 0,
   Send = 1 << 1,
   Receive = 1 << 2 | MailslotPermissionAccess::Send
};


[Serializable]
public ref class MailslotPermissionEntry
{
private:
   String^ name;
   String^ machineName;
   MailslotPermissionAccess permissionAccess;

internal:
   MailslotPermissionEntry( ResourcePermissionBaseEntry^ baseEntry )
   {
      this->permissionAccess = (MailslotPermissionAccess)baseEntry->PermissionAccess;
      this->name = baseEntry->PermissionAccessPath[ 0 ]->ToString();
      this->machineName = baseEntry->PermissionAccessPath[ 1 ]->ToString();
   }

   ResourcePermissionBaseEntry^ GetBaseEntry()
   {
      array<String^>^newStrings = {this->Name,this->MachineName};
      ResourcePermissionBaseEntry^ baseEntry = gcnew ResourcePermissionBaseEntry( (int)(this->PermissionAccess),newStrings );
      return baseEntry;
   }

public:
   MailslotPermissionEntry( MailslotPermissionAccess permissionAccess, String^ name, String^ machineName )
   {
      this->permissionAccess = permissionAccess;
      this->name = name;
      this->machineName = machineName;
   }

   property String^ Name 
   {
      String^ get()
      {
         return this->name;
      }
   }

   property String^ MachineName 
   {
      String^ get()
      {
         return this->machineName;
      }
   }

   property MailslotPermissionAccess PermissionAccess 
   {
      MailslotPermissionAccess get()
      {
         return this->permissionAccess;
      }
   }
};


[Serializable]
public ref class MailslotPermission: public ResourcePermissionBase
{
private:
   ArrayList^ innerCollection;
   void SetNames()
   {
      this->PermissionAccessType = MailslotPermissionAccess::typeid;
      array<String^>^newStrings = {"Name","Machine"};
      this->TagNames = newStrings;
   }


internal:
   void AddPermissionAccess( MailslotPermissionEntry^ entry )
   {
      ResourcePermissionBase::AddPermissionAccess( entry->GetBaseEntry() );
   }

   void Clear()
   {
      ResourcePermissionBase::Clear();
   }

   void RemovePermissionAccess( MailslotPermissionEntry^ entry )
   {
      ResourcePermissionBase::RemovePermissionAccess( entry->GetBaseEntry() );
   }


public:
   MailslotPermission()
   {
      SetNames();
   }

   MailslotPermission( PermissionState state )
      : ResourcePermissionBase( state )
   {
      SetNames();
   }

   MailslotPermission( MailslotPermissionAccess permissionAccess, String^ name, String^ machineName )
   {
      SetNames();
      this->AddPermissionAccess( gcnew MailslotPermissionEntry( permissionAccess,name,machineName ) );
   }

   MailslotPermission( array<MailslotPermissionEntry^>^permissionAccessEntries )
   {
      SetNames();
      if ( permissionAccessEntries == nullptr )
            throw gcnew ArgumentNullException( "permissionAccessEntries" );

      for ( int index = 0; index < permissionAccessEntries->Length; ++index )
         this->AddPermissionAccess( permissionAccessEntries[ index ] );
   }

   property ArrayList^ PermissionEntries 
   {
      ArrayList^ get()
      {
         if ( this->innerCollection == nullptr )
                  this->innerCollection = gcnew ArrayList;

         this->innerCollection->InsertRange( 0, safe_cast<ICollection^>(ResourcePermissionBase::GetPermissionEntries()) );
         return this->innerCollection;
      }
   }
};
import System.*;
import System.Security.Permissions.*;
import System.Collections.*;

/** @attribute Serializable()
 */
public class MailSlotPermission extends ResourcePermissionBase
{   

    private ArrayList innerCollection;

    public MailSlotPermission()
    {
        SetNames();
    } //MailSlotPermission

    public MailSlotPermission(PermissionState state)
    {
      super(state);
      SetNames();
    } //MailSlotPermission

    public MailSlotPermission(MailSlotPermissionAccess permissionAccess, 
        String name, String machineName)
    {
        SetNames();
        this.AddPermissionAccess(new MailSlotPermissionEntry(permissionAccess,
            name, machineName));
    } //MailSlotPermission

    public MailSlotPermission(MailSlotPermissionEntry permissionAccessEntries[])
    {
        SetNames();
        if (permissionAccessEntries == null) {
            throw new ArgumentNullException("permissionAccessEntries");
        }

        for (int index = 0; index < permissionAccessEntries.get_Length(); 
            ++index) {
            this.AddPermissionAccess((MailSlotPermissionEntry)
                permissionAccessEntries.get_Item(index));
        }
    } //MailSlotPermission 

    /** @property 
     */
    public ArrayList get_PermissionEntries()
    {
        if (this.innerCollection == null) {
            this.innerCollection = new ArrayList();
        }
        this.innerCollection.InsertRange(0, super.GetPermissionEntries());
        return this.innerCollection;
    }

    void AddPermissionAccess(MailSlotPermissionEntry entry)
    {
        super.AddPermissionAccess(entry.GetBaseEntry());
    } //AddPermissionAccess

    public void Clear()
    {
        super.Clear();
    } //Clear

    void RemovePermissionAccess(MailSlotPermissionEntry entry)
    {
        super.RemovePermissionAccess(entry.GetBaseEntry());
    } //RemovePermissionAccess

    private void SetNames()
    {
        this.set_PermissionAccessType(MailSlotPermissionAccess.class.ToType());
        this.set_TagNames(new String[] { "Name", "Machine" });
    } //SetNames
} //MailSlotPermission

public class MailSlotPermissionAccess
{
    public static int None = 0;
    public static int Send = 1 << 1;
    public static int Receive = 1 << 2 | Send;
} //MailSlotPermissionAccess

/** @attribute Serializable()
 */
public class MailSlotPermissionEntry
{
    private String name;
    private String machineName;
    private MailSlotPermissionAccess permissionAccess;

    public MailSlotPermissionEntry(MailSlotPermissionAccess permissionAccess, 
        String name, String machineName)
    {
        this.permissionAccess = permissionAccess;
        this.name = name;
        this.machineName = machineName;
    } //MailSlotPermissionEntry

    MailSlotPermissionEntry(ResourcePermissionBaseEntry baseEntry)
    {
        this.permissionAccess =(MailSlotPermissionAccess)(Object)((
            Int32)baseEntry.get_PermissionAccess());
        this.name = baseEntry.get_PermissionAccessPath()[0];
        this.machineName = baseEntry.get_PermissionAccessPath()[1];
    } //MailSlotPermissionEntry

    /** @property 
     */
    public String get_Name()
    {
        return this.name;
    }//get_Name

    /** @property
     */
    public String get_MachineName()
    {
        return this.machineName;
    }//get_MachineName

    /** @property
     */
    public MailSlotPermissionAccess get_PermissionAccess()
    {
        return this.permissionAccess;
    }//get_PermissionAccess

    ResourcePermissionBaseEntry GetBaseEntry()
    {
        ResourcePermissionBaseEntry baseEntry = new ResourcePermissionBaseEntry(
            Convert.ToInt32((Int32)((Object)(this.get_PermissionAccess()))), 
            new String[] { this.get_Name(), this.get_MachineName() });
        return baseEntry;
    } //GetBaseEntry
} //MailSlotPermissionEntry

继承层次结构

System.Object
   System.Security.CodeAccessPermission
    System.Security.Permissions.ResourcePermissionBase
       System.Diagnostics.EventLogPermission
       System.Diagnostics.PerformanceCounterPermission
       System.DirectoryServices.DirectoryServicesPermission
       System.ServiceProcess.ServiceControllerPermission

线程安全

此类型的任何公共静态(Visual Basic 中的 Shared)成员都是线程安全的,但不保证所有实例成员都是线程安全的。

平台

Windows 98、Windows 2000 SP4、Windows Millennium Edition、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

请参见

参考

ResourcePermissionBase 成员
System.Security.Permissions 命名空间