Share via


ResourcePermissionBase Clase

Definición

Precaución

Code Access Security is not supported or honored by the runtime.

Permite el control de los permisos de seguridad de acceso del código.

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
Herencia
ResourcePermissionBase
Derivado
Atributos
Implementaciones

Ejemplos

En el ejemplo siguiente se hereda de la ResourcePermissionBase clase . Se implementan 4 tipos de constructores. En el ejemplo también se proporciona una implementación de una clase denominada MailslotPermissionEntry. A continuación, la PermissionAccessType propiedad se establece de forma privada en el tipo de MailslotPermissionEntry. La TagNames propiedad se establece de forma privada en "Name" y "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

Comentarios

Precaución

La seguridad de acceso al código (CAS) ha quedado en desuso en todas las versiones de .NET Framework y .NET. Las versiones recientes de .NET no respetan las anotaciones cas y producen errores si se usan api relacionadas con CAS. Los desarrolladores deben buscar medios alternativos para realizar tareas de seguridad.

Nota

La ResourcePermissionBase clase compara cadenas mediante reglas de ordenación ordinal y omite el caso de las cadenas que se comparan.

Notas a los implementadores

Cuando hereda de ResourcePermissionBase, debe proporcionar al menos tres constructores, establecer dos propiedades y proporcionar una tercera propiedad. Los constructores necesarios son: un constructor sin parámetros, uno que toma como PermissionState parámetro y tantos como sea necesario que toman valores para las propiedades. Las propiedades que se deben establecer son PermissionAccessType y TagNames. La tercera propiedad necesaria es aquella que devuelve las entradas de permiso. Para obtener un ejemplo de una implementación de esta clase, vea PerformanceCounterPermission. En PerformanceCounterPermission, la TagNames propiedad se establece de forma privada en "Machine" y "Category", la PermissionAccessType propiedad se establece de forma privada en el tipo de PerformanceCounterPermissionAccessy la PermissionEntries propiedad devuelve las entradas de permiso.

Constructores

ResourcePermissionBase()

Inicializa una nueva instancia de la clase ResourcePermissionBase.

ResourcePermissionBase(PermissionState)

Inicializa una nueva instancia de la clase ResourcePermissionBase con el nivel de acceso a los recursos especificado en el momento de la creación.

Campos

Any

Especifica el carácter que se va a utilizar para representar cualquier carácter comodín.

Local

Especifica el carácter que se va a utilizar para representar una referencia local.

Propiedades

PermissionAccessType

Obtiene o establece un valor de enumeración que describe los tipos de acceso que se está asignando al recurso.

TagNames

Obtiene o establece una matriz de cadenas que identifican el recurso que se va a proteger.

Métodos

AddPermissionAccess(ResourcePermissionBaseEntry)

Agrega una entrada de permiso al permiso.

Assert()

Declara que el código de llamada puede tener acceso al recurso protegido por una demanda de permiso a través del código que llama a este método, incluso si los autores de la llamada situados en una posición más alta de la pila no tienen permiso para tener acceso al recurso. El uso de Assert() puede crear problemas de seguridad.

(Heredado de CodeAccessPermission)
Clear()

Borra el permiso de las entradas de permiso agregadas.

Copy()

Crea y devuelve una copia idéntica del objeto de permiso actual.

Demand()

Fuerza a un SecurityException en tiempo de ejecución si todos los autores de llamada situados en la parte superior de la pila de llamadas no disponen del permiso especificado por la instancia actual.

(Heredado de CodeAccessPermission)
Deny()
Obsoleto.
Obsoleto.

Impide que los autores de la llamada situados en la posición más alta de la pila de llamadas usen el código que llama a este método para tener acceso al recurso especificado por la instancia actual.

(Heredado de CodeAccessPermission)
Equals(Object)

Determina si el objeto CodeAccessPermission especificado es igual al objeto CodeAccessPermission actual.

(Heredado de CodeAccessPermission)
FromXml(SecurityElement)

Reconstruye un objeto de seguridad con un estado especificado a partir de codificación XML.

GetHashCode()

Obtiene un código hash para el objeto CodeAccessPermission que es adecuado para su uso en algoritmos hash y estructuras de datos como una tabla hash.

(Heredado de CodeAccessPermission)
GetPermissionEntries()

Devuelve una matriz con los objetos ResourcePermissionBaseEntry agregados a este permiso.

GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
Intersect(IPermission)

Crea y devuelve un objeto de permiso que es la intersección entre el objeto de permiso actual y un objeto de permiso de destino.

IsSubsetOf(IPermission)

Determina si el objeto de permiso actual es un subconjunto del permiso especificado.

IsUnrestricted()

Obtiene un valor que indica si el permiso no tiene restricciones.

MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
PermitOnly()

Impide que los llamadores situados más arriba en la pila de llamadas usen el código que llama a este método para tener acceso a todos los recursos excepto al recurso especificado por la instancia actual.

(Heredado de CodeAccessPermission)
RemovePermissionAccess(ResourcePermissionBaseEntry)

Quita una entrada de permiso del permiso.

ToString()

Crea y devuelve una representación de cadena del objeto de permiso actual.

(Heredado de CodeAccessPermission)
ToXml()

Crea y devuelve una codificación XML del objeto de seguridad y de su estado actual.

Union(IPermission)

Crea un objeto de permiso que combina el objeto de permiso actual y el objeto de permiso de destino.

Se aplica a