Lire en anglais

Partager via


CodeAccessPermission Classe

Définition

Attention

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

Définit la structure sous-jacente de toutes les autorisations d’accès au code.

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
Héritage
CodeAccessPermission
Dérivé
Attributs
Implémente

Exemples

L’exemple de code suivant montre une autorisation dérivée de la CodeAccessPermission classe .

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;
        }
     }
}

Remarques

Attention

La sécurité d’accès du code (CAS) a été déconseillée dans toutes les versions du .NET Framework et de .NET. Les versions récentes de .NET ne respectent pas les annotations CAS et produisent des erreurs si les API liées à CAS sont utilisées. Les développeurs doivent chercher d’autres moyens pour accomplir les tâches liées à la sécurité.

Les autorisations d’accès au code utilisent une procédure de pile pour s’assurer que tous les appelants du code ont reçu une autorisation. Si un objet d’autorisation est null, il est géré de la même façon qu’un objet d’autorisation avec l’état PermissionState.None.

La pile des appels est généralement représentée comme augmentant vers le bas, de sorte que les méthodes plus élevées dans la pile d’appels d’appels sont inférieures dans la pile des appels.

Les héritiers de la CodeAccessPermission classe doivent bénéficier d’une confiance totale pour fonctionner correctement en tant qu’autorisations étendant l’infrastructure de sécurité. Pour déterminer que les héritiers sont entièrement approuvés, CodeAccessPermission émet un InheritanceDemand pour ControlEvidence = true et ControlPolicy = true.

Notes pour les responsables de l’implémentation

Lorsque vous héritez de CodeAccessPermission, vous devez également implémenter l’interface IUnrestrictedPermission .

Les membres suivants CodeAccessPermission doivent être remplacés : Copy(), Intersect(IPermission), IsSubsetOf(IPermission), ToXml(), FromXml(SecurityElement)et Union(IPermission).

Vous devez également définir un constructeur qui prend un PermissionState comme seul paramètre.

Vous devez appliquer l’attribut SerializableAttribute à une classe qui hérite de CodeAccessPermission.

Constructeurs

CodeAccessPermission()
Obsolète.

Initialise une nouvelle instance de la classe CodeAccessPermission.

Méthodes

Assert()
Obsolète.

Déclare que le code appelant peut accéder à la ressource protégée par une demande d’autorisation via le code qui appelle cette méthode, même si les appelants situés plus haut dans la pile n’ont pas reçu l’autorisation d’accéder à la ressource. L’utilisation de Assert() peut créer des problèmes de sécurité.

Copy()
Obsolète.

En cas d’implémentation par une classe dérivée, crée et retourne une copie identique de l’objet d’autorisation actuel.

Demand()
Obsolète.

Force un SecurityException au moment de l’exécution si tous les appelants figurant plus haut dans la pile des appels ne disposent pas des autorisations spécifiées par l’instance actuelle.

Deny()
Obsolète.
Obsolète.

Empêche les appelants plus hauts dans la pile des appels d’utiliser le code qui appelle cette méthode pour accéder à la ressource spécifiée par l’instance actuelle.

Equals(Object)
Obsolète.

Détermine si l'objet CodeAccessPermission spécifié est égal à CodeAccessPermission en cours.

Equals(Object)
Obsolète.

Détermine si l'objet spécifié est égal à l'objet actuel.

(Hérité de Object)
FromXml(SecurityElement)
Obsolète.

En cas de remplacement dans une classe dérivée, reconstruit un objet de sécurité avec un état spécifié à partir d’un encodage XML.

GetHashCode()
Obsolète.

Obtient un code de hachage pour l’objet CodeAccessPermission qui peut être utilisé dans des structures de données et des algorithmes de hachage, comme une table de hachage.

GetHashCode()
Obsolète.

Fait office de fonction de hachage par défaut.

(Hérité de Object)
GetType()
Obsolète.

Obtient le Type de l'instance actuelle.

(Hérité de Object)
Intersect(IPermission)
Obsolète.

Lors de l'implémentation par une classe dérivée, crée et retourne une autorisation qui est l'intersection de l'autorisation en cours et de l'autorisation spécifiée.

IsSubsetOf(IPermission)
Obsolète.

Lors de l'implémentation par une classe dérivée, détermine si l'autorisation en cours est un sous-ensemble de l'autorisation spécifiée.

MemberwiseClone()
Obsolète.

Crée une copie superficielle du Object actuel.

(Hérité de Object)
PermitOnly()
Obsolète.

Empêche les appelants plus hauts dans la pile des appels d’utiliser le code qui appelle cette méthode pour accéder à toutes les ressources à l’exception de la ressource spécifiée par l’instance actuelle.

RevertAll()
Obsolète.

Entraîne la suppression définitive de toutes les substitutions antérieures pour le frame actuel.

RevertAssert()
Obsolète.

Entraîne la suppression définitive de tout Assert() antérieur pour le frame actuel.

RevertDeny()
Obsolète.
Obsolète.

Entraîne la suppression définitive de tout Deny() antérieur pour le frame actuel.

RevertPermitOnly()
Obsolète.

Entraîne la suppression définitive de tout PermitOnly() antérieur pour le frame actuel.

ToString()
Obsolète.

Crée et retourne une chaîne représentant l’objet d’autorisation actuel.

ToXml()
Obsolète.

En cas de substitution dans une classe dérivée, crée un encodage XML de l’objet de sécurité et de son état actuel.

Union(IPermission)
Obsolète.

Lors de son remplacement dans une classe dérivée, crée une autorisation qui est l’union de l’autorisation actuelle et de l’autorisation spécifiée.

S’applique à

Produit Versions (Obsolète)
.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)