ResourcePermissionBase Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Przestroga
Code Access Security is not supported or honored by the runtime.
Umożliwia kontrolę nad uprawnieniami zabezpieczeń dostępu do kodu.
public ref class ResourcePermissionBase abstract : System::Security::CodeAccessPermission, System::Security::Permissions::IUnrestrictedPermission
public abstract class ResourcePermissionBase : System.Security.CodeAccessPermission, 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 abstract class ResourcePermissionBase : System.Security.CodeAccessPermission, System.Security.Permissions.IUnrestrictedPermission
[System.Serializable]
public abstract class ResourcePermissionBase : System.Security.CodeAccessPermission, System.Security.Permissions.IUnrestrictedPermission
type ResourcePermissionBase = class
inherit CodeAccessPermission
interface IUnrestrictedPermission
[<System.Obsolete("Code Access Security is not supported or honored by the runtime.", DiagnosticId="SYSLIB0003", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
type ResourcePermissionBase = class
inherit CodeAccessPermission
interface IUnrestrictedPermission
[<System.Serializable>]
type ResourcePermissionBase = class
inherit CodeAccessPermission
interface IUnrestrictedPermission
Public MustInherit Class ResourcePermissionBase
Inherits CodeAccessPermission
Implements IUnrestrictedPermission
- Dziedziczenie
- Pochodne
- Atrybuty
- Implementuje
Przykłady
Poniższy przykład dziedziczy z ResourcePermissionBase klasy. Zaimplementowano 4 rodzaje konstruktorów. W przykładzie przedstawiono również implementację klasy o nazwie MailslotPermissionEntry
. Właściwość PermissionAccessType jest następnie prywatnie ustawiona na typ MailslotPermissionEntry
. Właściwość TagNames jest ustawiana prywatnie na "Name" i "Machine".
#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;
}
}
};
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;
}
}
Imports System.Security.Permissions
Imports System.Collections
<Serializable()> Public Class MailslotPermission
Inherits ResourcePermissionBase
Private innerCollection As ArrayList
Public Sub New()
SetNames()
End Sub
Public Sub New(ByVal state As PermissionState)
MyBase.New(state)
SetNames()
End Sub
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
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
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
Friend Shadows Sub Clear()
MyBase.Clear()
End Sub
Friend Overloads Sub RemovePermissionAccess(ByVal entry As MailslotPermissionEntry)
MyBase.RemovePermissionAccess(entry.GetBaseEntry())
End Sub
Private Sub SetNames()
Me.PermissionAccessType = GetType(MailslotPermissionAccess)
Me.TagNames = New String() {"Name", "Machine"}
End Sub
End Class
<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
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
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
Uwagi
Przestroga
Zabezpieczenia dostępu kodu (CAS) zostały uznane za przestarzałe we wszystkich wersjach .NET Framework i .NET. Najnowsze wersje platformy .NET nie honorują adnotacji CAS i generują błędy, jeśli są używane interfejsy API związane z usługą CAS. Deweloperzy powinni szukać alternatywnych sposobów wykonywania zadań zabezpieczeń.
Uwaga
Klasa ResourcePermissionBase porównuje ciągi przy użyciu reguł sortowania porządkowego i ignoruje przypadek porównywanych ciągów.
Uwagi dotyczące implementowania
Po dziedziczeniu z ResourcePermissionBaseprogramu należy podać co najmniej trzy konstruktory, ustawić dwie właściwości i podać trzecią właściwość. Wymagane konstruktory to: konstruktor bez parametrów, który przyjmuje PermissionState jako parametr, i tyle, ile jest to wymagane, które przyjmują wartości dla właściwości. Właściwości, które należy ustawić, to PermissionAccessType i TagNames. Trzecia wymagana właściwość jest taka, która zwraca wpisy uprawnień. Przykład implementacji tej klasy można znaleźć w temacie PerformanceCounterPermission. W PerformanceCounterPermissionsystemie TagNames właściwość jest ustawiana prywatnie na "Maszyna" i "Kategoria", PermissionAccessType właściwość jest prywatnie ustawiona na typ PerformanceCounterPermissionAccess, a PermissionEntries właściwość zwraca wpisy uprawnień.
Konstruktory
ResourcePermissionBase() |
Inicjuje nowe wystąpienie klasy ResourcePermissionBase. |
ResourcePermissionBase(PermissionState) |
Inicjuje ResourcePermissionBase nowe wystąpienie klasy o określonym poziomie dostępu do zasobów podczas tworzenia. |
Pola
Any |
Określa znak, który ma być używany do reprezentowania dowolnego znaku wieloznacznych. |
Local |
Określa znak, który ma być używany do reprezentowania odwołania lokalnego. |
Właściwości
PermissionAccessType |
Pobiera lub ustawia wartość wyliczenia, która opisuje typy dostępu, które daje zasób. |
TagNames |
Pobiera lub ustawia tablicę ciągów identyfikujących chroniny zasób. |
Metody
AddPermissionAccess(ResourcePermissionBaseEntry) |
Dodaje wpis uprawnień do uprawnienia. |
Assert() |
Deklaruje, że kod wywołujący może uzyskać dostęp do zasobu chronionego przez żądanie uprawnień za pośrednictwem kodu, który wywołuje tę metodę, nawet jeśli obiekty wywołujące wyższe w stosie nie otrzymały uprawnień dostępu do zasobu. Za pomocą polecenia Assert() można tworzyć problemy z zabezpieczeniami. (Odziedziczone po CodeAccessPermission) |
Clear() |
Czyści uprawnienia dodanych wpisów uprawnień. |
Copy() |
Tworzy i zwraca identyczną kopię bieżącego obiektu uprawnień. |
Demand() |
Wymusza w SecurityException czasie wykonywania, jeśli wszystkie elementy wywołujące wyższe w stosie wywołań nie otrzymały uprawnienia określonego przez bieżące wystąpienie. (Odziedziczone po CodeAccessPermission) |
Deny() |
Nieaktualne.
Nieaktualne.
Zapobiega wywoływaniom wyższym w stosie wywołań przy użyciu kodu, który wywołuje tę metodę w celu uzyskania dostępu do zasobu określonego przez bieżące wystąpienie. (Odziedziczone po CodeAccessPermission) |
Equals(Object) |
Określa, czy określony CodeAccessPermission obiekt jest równy bieżącemu CodeAccessPermission. (Odziedziczone po CodeAccessPermission) |
FromXml(SecurityElement) |
Rekonstruuje obiekt zabezpieczeń o określonym stanie z kodowania XML. |
GetHashCode() |
Pobiera kod skrótu CodeAccessPermission dla obiektu, który jest odpowiedni do użycia w algorytmach tworzenia skrótów i strukturach danych, takich jak tabela skrótów. (Odziedziczone po CodeAccessPermission) |
GetPermissionEntries() |
Zwraca tablicę ResourcePermissionBaseEntry obiektów dodanych do tego uprawnienia. |
GetType() |
Type Pobiera wartość bieżącego wystąpienia. (Odziedziczone po Object) |
Intersect(IPermission) |
Tworzy i zwraca obiekt uprawnień, który jest skrzyżowaniem bieżącego obiektu uprawnień i obiektu uprawnień docelowego. |
IsSubsetOf(IPermission) |
Określa, czy bieżący obiekt uprawnień jest podzbiorem określonego uprawnienia. |
IsUnrestricted() |
Pobiera wartość wskazującą, czy uprawnienie jest nieograniczone. |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (Odziedziczone po Object) |
PermitOnly() |
Zapobiega wywoływaniom wyższym w stosie wywołań przy użyciu kodu, który wywołuje tę metodę w celu uzyskania dostępu do wszystkich zasobów z wyjątkiem zasobu określonego przez bieżące wystąpienie. (Odziedziczone po CodeAccessPermission) |
RemovePermissionAccess(ResourcePermissionBaseEntry) |
Usuwa wpis uprawnień z uprawnienia. |
ToString() |
Tworzy i zwraca ciąg reprezentujący bieżący obiekt uprawnień. (Odziedziczone po CodeAccessPermission) |
ToXml() |
Tworzy i zwraca kodowanie XML obiektu zabezpieczeń i jego bieżącego stanu. |
Union(IPermission) |
Tworzy obiekt uprawnień, który łączy bieżący obiekt uprawnień i docelowy obiekt uprawnień. |