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 作为参数的构造函数以及足够多的采用属性值作为参数的构造函数。需要设置的属性为 PermissionAccessType 和 TagNames。所需的第三个属性是返回权限项的属性。有关此类的实现示例,请参见 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