Auf Englisch lesen

Teilen über


CodeAccessPermission Klasse

Definition

Achtung

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

Definiert die zugrunde liegende Struktur aller Codezugriffsberechtigungen.

C#
public abstract class CodeAccessPermission : System.Security.IPermission, System.Security.IStackWalk
C#
[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 CodeAccessPermission : System.Security.IPermission, System.Security.IStackWalk
C#
[System.Serializable]
public abstract class CodeAccessPermission : System.Security.IPermission, System.Security.IStackWalk
C#
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class CodeAccessPermission : System.Security.IPermission, System.Security.IStackWalk
Vererbung
CodeAccessPermission
Abgeleitet
Attribute
Implementiert

Beispiele

Das folgende Codebeispiel zeigt eine von der -Klasse abgeleitete CodeAccessPermission Berechtigung.

C#
//#define debug
// This custom permission is intended only for the purposes of illustration.
// The following code shows how to create a custom permission that inherits
// from CodeAccessPermission. The code implements all required overrides.
// A wildcard character ('*') is implemented for the Name property.
using System;
using System.Security;
using System.Security.Permissions;
using System.IO;
using System.Security.Policy;
using System.Collections;
using System.Text;

[assembly:System.Reflection.AssemblyKeyFile("Key.snk")]
[assembly:System.Security.AllowPartiallyTrustedCallersAttribute()]

namespace MyPermission
{
    [Serializable()] sealed public class   NameIdPermission : CodeAccessPermission, IUnrestrictedPermission
    {
        private String m_Name;
        private bool m_Unrestricted;

        public  NameIdPermission(String name)
        {
            m_Name = name;
        }

        public  NameIdPermission(PermissionState state)
        {
            if (state == PermissionState.None)
            {
                m_Name = "";
            }
            else
                if (state == PermissionState.Unrestricted)
            {
                throw new ArgumentException("Unrestricted state is not allowed for identity permissions.");
            }
            else
            {
                throw new ArgumentException("Invalid permission state.");
            }
        }

        public String Name
        {
            set{m_Name = value;}
            get{ return m_Name;}
        }
        public override IPermission Copy()
        {
            string name = m_Name;
            return new  NameIdPermission( name );
        }
        public bool IsUnrestricted()
        {
            // Always false, unrestricted state is not allowed.
            return m_Unrestricted;
        }

        private bool VerifyType(IPermission target)
        {
            return (target is  NameIdPermission);
        }
        public override bool IsSubsetOf(IPermission target)
        {
#if(debug)
            Console.WriteLine ("************* Entering IsSubsetOf *********************");
#endif
            if (target == null)
            {
                Console.WriteLine ("IsSubsetOf: target == null");
                return false;
            }
#if(debug)

            Console.WriteLine ("This is = " + (( NameIdPermission)this).Name);
            Console.WriteLine ("Target is " + (( NameIdPermission)target).m_Name);
#endif
            try
            {
                 NameIdPermission operand = ( NameIdPermission)target;

                // The following check for unrestricted permission is only included as an example for
                // permissions that allow the unrestricted state. It is of no value for this permission.
                if (true == operand.m_Unrestricted)
                {
                    return true;
                }
                else if (true == this.m_Unrestricted)
                {
                    return false;
                }

                if (this.m_Name != null)
                {
                    if (operand.m_Name == null) return false;

                    if (this.m_Name == "") return true;
                }

                if (this.m_Name.Equals (operand.m_Name))
                {
                    return true;
                }
                else
                {
                    // Check for wild card character '*'.
                    int i = operand.m_Name.LastIndexOf ("*");

                    if (i > 0)
                    {
                        string prefix = operand.m_Name.Substring (0, i);

                        if (this.m_Name.StartsWith (prefix))
                        {
                            return true;
                        }
                    }
                }

                return false;
            }
            catch (InvalidCastException)
            {
                throw new ArgumentException (String.Format ("Argument_WrongType", this.GetType ().FullName));
            }
        }
        public override IPermission Intersect(IPermission target)
        {
            Console.WriteLine ("************* Entering Intersect *********************");
            if (target == null)
            {
                return null;
            }
#if(debug)
            Console.WriteLine ("This is = " + (( NameIdPermission)this).Name);
            Console.WriteLine ("Target is " + (( NameIdPermission)target).m_Name);
#endif
            if (!VerifyType(target))
            {
                throw new ArgumentException (String.Format ("Argument is wrong type.", this.GetType ().FullName));
            }

             NameIdPermission operand = ( NameIdPermission)target;

            if (operand.IsSubsetOf (this)) return operand.Copy ();
            else if (this.IsSubsetOf (operand)) return this.Copy ();
            else
                return null;
        }

        public override IPermission Union(IPermission target)
        {
#if(debug)
            Console.WriteLine ("************* Entering Union *********************");
#endif
            if (target == null)
            {
                return this;
            }
#if(debug)
            Console.WriteLine ("This is = " + (( NameIdPermission)this).Name);
            Console.WriteLine ("Target is " + (( NameIdPermission)target).m_Name);
#endif
            if (!VerifyType(target))
            {
                throw new ArgumentException (String.Format ("Argument_WrongType", this.GetType ().FullName));
            }

             NameIdPermission operand = ( NameIdPermission)target;

            if (operand.IsSubsetOf (this)) return this.Copy ();
            else if (this.IsSubsetOf (operand)) return operand.Copy ();
            else
                return null;
        }
        
        
        
        
       public override void FromXml(SecurityElement e)
        {
            // The following code for unrestricted permission is only included as an example for
            // permissions that allow the unrestricted state. It is of no value for this permission.
            String elUnrestricted = e.Attribute("Unrestricted");
            if (null != elUnrestricted)
            {
                m_Unrestricted = bool.Parse(elUnrestricted);
                return;
            }

            String elName = e.Attribute( "Name" );
            m_Name = elName == null ? null : elName;
        }
        public override SecurityElement ToXml()
        {
            // Use the SecurityElement class to encode the permission to XML.
            SecurityElement esd = new SecurityElement("IPermission");
            String name = typeof( NameIdPermission).AssemblyQualifiedName;
            esd.AddAttribute("class", name);
            esd.AddAttribute("version", "1.0");

            // The following code for unrestricted permission is only included as an example for
            // permissions that allow the unrestricted state. It is of no value for this permission.
            if (m_Unrestricted)
            {
                esd.AddAttribute("Unrestricted", true.ToString());
            }
            if (m_Name != null) esd.AddAttribute( "Name", m_Name );
            return esd;
        }
     }
}

Hinweise

Vorsicht

Die Codezugriffssicherheit (CAS, Code Access Security) ist in allen Versionen von .NET Framework und .NET veraltet. Aktuelle Versionen von .NET berücksichtigen keine CAS-Anmerkungen und erzeugen Fehler, wenn CAS-bezogene APIs verwendet werden. Entwickler*innen sollten alternative Mittel zum Ausführen von Sicherheitsaufgaben suchen.

Codezugriffsberechtigungen verwenden einen Stapellauf, um sicherzustellen, dass allen Aufrufenden des Codes eine Berechtigung erteilt wurde. Wenn ein Berechtigungsobjekt ist null, wird es genauso behandelt wie ein Berechtigungsobjekt mit dem Status PermissionState.None.

Der Aufrufstapel wird in der Regel als nach unten wächst dargestellt, sodass Methoden höher im Aufrufstapel aufgerufen werden, die im Aufrufstapel niedriger sind.

Erben der CodeAccessPermission -Klasse muss die vollständige Vertrauenswürdigkeit gewährt werden, damit sie ordnungsgemäß als Berechtigungen funktionieren, die die Sicherheitsinfrastruktur erweitern. Um festzustellen, dass die Erben vollständig vertrauenswürdig sind, CodeAccessPermission gibt ein für ControlEvidencetrue = und aus.InheritanceDemandControlPolicy = true

Hinweise für Ausführende

Wenn Sie von erben CodeAccessPermission, müssen Sie auch die IUnrestrictedPermission -Schnittstelle implementieren.

Die folgenden CodeAccessPermission Member müssen überschrieben werden: Copy(), Intersect(IPermission), IsSubsetOf(IPermission), ToXml()FromXml(SecurityElement), und Union(IPermission).

Sie müssen auch einen Konstruktor definieren, der einen PermissionState als einzigen Parameter annimmt.

Sie müssen das SerializableAttribute Attribut auf eine Klasse anwenden, die von CodeAccessPermissionerbt.

Konstruktoren

CodeAccessPermission()
Veraltet.

Initialisiert eine neue Instanz der CodeAccessPermission-Klasse.

Methoden

Assert()
Veraltet.

Deklariert, dass der aufrufende Code auf die durch eine Berechtigungsforderung geschützte Ressource über den diese Methode aufrufenden Code zugreifen kann, auch wenn Aufrufern einer höheren Ebene im Stapel keine Berechtigung zum Zugreifen auf die Ressource erteilt wurde. Die Verwendung von Assert() kann zu Sicherheitsproblemen führen.

Copy()
Veraltet.

Ist diese Methode durch eine abgeleitete Klasse implementiert, erstellt sie eine identische Kopie des aktuellen Berechtigungsobjekts und gibt diese Kopie zurück.

Demand()
Veraltet.

Erzwingt zur Laufzeit eine SecurityException, wenn nicht allen Aufrufern, die in der Aufrufliste höher eingestuft sind, die Berechtigung gewährt wurde, die von der aktuellen Instanz angegeben wird.

Deny()
Veraltet.
Veraltet.

Verhindert, dass in der Aufrufliste höher eingestufte Aufrufer den Code verwenden, der diese Methode aufruft, um auf die Ressource zuzugreifen, die von der aktuellen Instanz angegeben wird.

Equals(Object)
Veraltet.

Bestimmt, ob das angegebene CodeAccessPermission-Objekt und das aktuelle CodeAccessPermission-Objekt gleich sind.

Equals(Object)
Veraltet.

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
FromXml(SecurityElement)
Veraltet.

Rekonstruiert beim außer Kraft setzen in einer abgeleiteten Klasse ein Sicherheitsobjekt mit einem angegebenen Zustand aus einer XML-Codierung.

GetHashCode()
Veraltet.

Ruft einen Hashcode für das CodeAccessPermission-Objekt ab, das sich für die Verwendung in Hashalgorithmen und Datenstrukturen eignet, z.B. in einer Hashtabelle.

GetHashCode()
Veraltet.

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetType()
Veraltet.

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
Intersect(IPermission)
Veraltet.

Bewirkt, dass bei der Implementierung durch eine abgeleitete Klasse eine Berechtigung, die die Schnittmenge der aktuellen Berechtigung und der angegebenen Berechtigung darstellt, erstellt und zurückgegeben wird.

IsSubsetOf(IPermission)
Veraltet.

Bestimmt bei der Implementierung durch eine abgeleitete Klasse, ob die aktuelle Berechtigung eine Teilmenge der angegebenen Berechtigung ist.

MemberwiseClone()
Veraltet.

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
PermitOnly()
Veraltet.

Verhindert, dass in der Aufrufliste höher eingestufte Aufrufer den Code, der diese Methode aufruft, verwenden, um auf alle Ressourcen außer die Ressource zuzugreifen, die von der aktuellen Instanz angegeben wird.

RevertAll()
Veraltet.

Veranlasst, dass alle vorherigen Überschreibungen für den aktuellen Frame entfernt werden und nicht mehr wirksam sind.

RevertAssert()
Veraltet.

Veranlasst, dass alle vorherigen Assert() für den aktuellen Frame entfernt werden und nicht mehr wirksam sind.

RevertDeny()
Veraltet.
Veraltet.

Veranlasst, dass alle vorherigen Deny() für den aktuellen Frame entfernt werden und nicht mehr wirksam sind.

RevertPermitOnly()
Veraltet.

Veranlasst, dass alle vorherigen PermitOnly() für den aktuellen Frame entfernt werden und nicht mehr wirksam sind.

ToString()
Veraltet.

Erstellt eine Zeichenfolgendarstellung des aktuellen Berechtigungsobjekts und gibt diese zurück.

ToXml()
Veraltet.

Erstellt bei Überschreibung in einer abgeleiteten Klasse eine XML-Codierung des Sicherheitsobjekts und seines aktuellen Zustands.

Union(IPermission)
Veraltet.

Erstellt beim Überschreiben in einer abgeleiteten Klasse eine Berechtigung als Kombination der aktuellen und der angegebenen Berechtigung.

Gilt für:

Produkt Versionen (Veraltet)
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
Windows Desktop 3.0, 3.1 (5, 6, 7, 8, 9)