Číst v angličtině

Sdílet prostřednictvím


CodeAccessPermission Třída

Definice

Upozornění

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

Definuje základní strukturu všech přístupových oprávnění kódu.

public abstract class CodeAccessPermission : System.Security.IPermission, System.Security.IStackWalk
[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
[System.Serializable]
public abstract class CodeAccessPermission : System.Security.IPermission, System.Security.IStackWalk
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class CodeAccessPermission : System.Security.IPermission, System.Security.IStackWalk
Dědičnost
CodeAccessPermission
Odvozené
Atributy
Implementuje

Příklady

Následující příklad kódu ukazuje oprávnění odvozené z CodeAccessPermission třídy.

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

Poznámky

Upozornění

Zabezpečení přístupu kódu (CAS) bylo zastaralé ve všech verzích rozhraní .NET Framework a .NET. Nedávné verze rozhraní .NET nedodržují poznámky CAS a při použití rozhraní API souvisejících s cas vytvářejí chyby. Vývojáři by měli hledat alternativní způsoby provádění úloh zabezpečení.

Přístupová oprávnění kódu používají trasu zásobníku, aby se zajistilo, že všichni volající kód mají udělené oprávnění. Pokud je nullobjekt oprávnění , zpracovává se stejně jako objekt oprávnění se stavem PermissionState.None.

Zásobník volání je obvykle reprezentován jako rostoucí pokles, takže metody vyšší v zásobníku volání metody volání nižší v zásobníku volání.

Dědům CodeAccessPermission třídy musí být udělen úplný vztah důvěryhodnosti, aby správně fungovaly jako oprávnění rozšiřující infrastrukturu zabezpečení. Chcete-li zjistit, zda jsou dědci plně důvěryhodní, CodeAccessPermission vydá pro ControlEvidencetrue = InheritanceDemand a .ControlPolicy = true

Poznámky pro implementátory

Pokud dědíte z CodeAccessPermission, musíte také implementovat IUnrestrictedPermission rozhraní.

Je nutné přepsat následující CodeAccessPermission členy: Copy(), Intersect(IPermission), IsSubsetOf(IPermission), ToXml(), FromXml(SecurityElement)a Union(IPermission).

Musíte také definovat konstruktor, který jako jediný parametr přebírá PermissionState parametr .

Atribut musíte použít SerializableAttribute na třídu, která dědí z CodeAccessPermission.

Konstruktory

CodeAccessPermission()
Zastaralé.

Inicializuje novou instanci CodeAccessPermission třídy.

Metody

Assert()
Zastaralé.

Deklaruje, že volající kód má přístup k prostředku chráněnému požadavkem na oprávnění prostřednictvím kódu, který volá tuto metodu, i když volajícím vyššímu v zásobníku nebylo uděleno oprávnění pro přístup k prostředku. Použití Assert() může vytvořit problémy se zabezpečením.

Copy()
Zastaralé.

Při implementaci odvozenou třídou vytvoří a vrátí identickou kopii aktuálního objektu oprávnění.

Demand()
Zastaralé.

SecurityException Vynutí hodnotu za běhu, pokud všem volajícím, kteří jsou výše v zásobníku volání, nebylo uděleno oprávnění určené aktuální instancí.

Deny()
Zastaralé.
Zastaralé.

Zabraňuje volajícím, kteří jsou výše v zásobníku volání, v použití kódu, který volá tuto metodu pro přístup k prostředku určenému aktuální instancí.

Equals(Object)
Zastaralé.

Určuje, zda je zadaný CodeAccessPermission objekt roven aktuálnímu CodeAccessPermissionobjektu .

Equals(Object)
Zastaralé.

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(Zděděno od Object)
FromXml(SecurityElement)
Zastaralé.

Při přepsání v odvozené třídě rekonstruuje objekt zabezpečení se zadaným stavem z kódování XML.

GetHashCode()
Zastaralé.

Získá hash kód pro CodeAccessPermission objekt, který je vhodný pro použití v hashovací algoritmy a datové struktury, jako je hash tabulky.

GetHashCode()
Zastaralé.

Slouží jako výchozí hashovací funkce.

(Zděděno od Object)
GetType()
Zastaralé.

Získá aktuální Type instanci.

(Zděděno od Object)
Intersect(IPermission)
Zastaralé.

Při implementaci odvozenou třídou vytvoří a vrátí oprávnění, které je průsečíkem aktuálního oprávnění a zadaného oprávnění.

IsSubsetOf(IPermission)
Zastaralé.

Při implementaci odvozenou třídou určuje, zda aktuální oprávnění je podmnožinou zadaného oprávnění.

MemberwiseClone()
Zastaralé.

Vytvoří mělkou kopii aktuálního Objectsouboru .

(Zděděno od Object)
PermitOnly()
Zastaralé.

Zabraňuje volajícím, kteří jsou výše v zásobníku volání, v použití kódu, který volá tuto metodu pro přístup ke všem prostředkům s výjimkou prostředku určeného aktuální instancí.

RevertAll()
Zastaralé.

Způsobí, že se odeberou všechna předchozí přepsání aktuálního rámce a přestanou platit.

RevertAssert()
Zastaralé.

Způsobí, že všechny předchozí Assert() snímky aktuálního rámce se odeberou a přestanou platit.

RevertDeny()
Zastaralé.
Zastaralé.

Způsobí, že všechny předchozí Deny() snímky aktuálního rámce se odeberou a přestanou platit.

RevertPermitOnly()
Zastaralé.

Způsobí, že všechny předchozí PermitOnly() snímky aktuálního rámce se odeberou a přestanou platit.

ToString()
Zastaralé.

Vytvoří a vrátí řetězcovou reprezentaci aktuálního objektu oprávnění.

ToXml()
Zastaralé.

Při přepsání v odvozené třídě vytvoří kódování XML objektu zabezpečení a jeho aktuální stav.

Union(IPermission)
Zastaralé.

Při přepsání v odvozené třídě vytvoří oprávnění, které je sjednocením aktuálního oprávnění a zadaného oprávnění.

Platí pro

Produkt Verze (zastaralé)
.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)