Lire en anglais

Partager via


FileCodeGroup Classe

Définition

Attention

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

Accorde des autorisations de manipulation de fichiers situés dans les assemblys de code vers des assemblys de code qui correspondent à la condition d'appartenance. Cette classe ne peut pas être héritée.

C#
[System.Obsolete("Code Access Security is not supported or honored by the runtime.", DiagnosticId="SYSLIB0003", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public sealed class FileCodeGroup : System.Security.Policy.CodeGroup
C#
[System.Serializable]
public sealed class FileCodeGroup : System.Security.Policy.CodeGroup
C#
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class FileCodeGroup : System.Security.Policy.CodeGroup
C#
public sealed class FileCodeGroup : System.Security.Policy.CodeGroup
Héritage
FileCodeGroup
Attributs

Exemples

L’exemple suivant montre l’utilisation des membres de la FileCodeGroup classe .

C#
using System;
using System.Security;
using System.Security.Policy;
using System.Security.Permissions;
using System.Reflection;

class Members
{
    [STAThread]
    static void Main(string[] args)
    {
        FileCodeGroup fileCodeGroup = constructDefaultGroup();
        
        // Create a deep copy of the FileCodeGroup.
        FileCodeGroup copyCodeGroup = (FileCodeGroup)fileCodeGroup.Copy();

        CompareTwoCodeGroups(fileCodeGroup, copyCodeGroup);

        addPolicy(ref fileCodeGroup);
        addXmlMember(ref fileCodeGroup);
        updateMembershipCondition(ref fileCodeGroup);
        addChildCodeGroup(ref fileCodeGroup);

        Console.Write("Comparing the resolved code group ");
        Console.WriteLine("with the initial code group.");
        FileCodeGroup resolvedCodeGroup =
            ResolveGroupToEvidence(fileCodeGroup);
        if (CompareTwoCodeGroups(fileCodeGroup, resolvedCodeGroup))
        {
            PrintCodeGroup(resolvedCodeGroup);
        }
        else
        {
            PrintCodeGroup(fileCodeGroup);
        }
        
        Console.WriteLine("This sample completed successfully; " +
            "press Enter to exit.");
        Console.ReadLine();
    }

    // Construct a new FileCodeGroup with Read, Write, Append 
    // and PathDiscovery access.
    private static FileCodeGroup constructDefaultGroup()
    {
        // Construct a new file code group that has complete access to
        // files in the specified path.
        FileCodeGroup fileCodeGroup = 
            new FileCodeGroup(
            new AllMembershipCondition(),
            FileIOPermissionAccess.AllAccess);

        // Set the name of the file code group.
        fileCodeGroup.Name = "TempCodeGroup";

        // Set the description of the file code group.
        fileCodeGroup.Description = "Temp folder permissions group";

        // Retrieve the string representation of the  fileCodeGroup’s 
        // attributes. FileCodeGroup does not use AttributeString, so the
        // value should be null.
        if (fileCodeGroup.AttributeString != null)
        {
            throw new NullReferenceException(
                "The AttributeString property should be null.");
        }

        return fileCodeGroup;
    }

    // Add file permission to restrict write access to all files on the
    // local machine.
    private static void addPolicy(ref FileCodeGroup fileCodeGroup)
    {
        // Set the PolicyStatement property to a policy with read access to
        // the root directory of drive C.
        FileIOPermission rootFilePermissions = 
            new FileIOPermission(PermissionState.None);
        rootFilePermissions.AllLocalFiles = FileIOPermissionAccess.Read;
        rootFilePermissions.SetPathList(FileIOPermissionAccess.Read,"C:\\");

        NamedPermissionSet namedPermissions =
            new NamedPermissionSet("RootPermissions");
        namedPermissions.AddPermission(rootFilePermissions);
        
        fileCodeGroup.PolicyStatement =
            new PolicyStatement(namedPermissions);
    }

    // Set the membership condition of the specified FileCodeGroup 
    // to the Intranet zone.
    private static void updateMembershipCondition(
        ref FileCodeGroup fileCodeGroup)
    {
        ZoneMembershipCondition zoneCondition =
            new ZoneMembershipCondition(SecurityZone.Intranet);
        fileCodeGroup.MembershipCondition = zoneCondition;
    }

    // Add a child group with read-access file permission to the specified 
    // code group.
    private static void addChildCodeGroup(ref FileCodeGroup fileCodeGroup)
    {
        // Create a file code group with read-access permission.
        FileCodeGroup tempFolderCodeGroup = new FileCodeGroup(
            new AllMembershipCondition(), 
            FileIOPermissionAccess.Read);

        // Set the name of the child code group and add it to 
        // the specified code group.
        tempFolderCodeGroup.Name = "Read-only group";
        fileCodeGroup.AddChild(tempFolderCodeGroup);
    }

    // Compare the two specified file code groups for equality.
    private static bool CompareTwoCodeGroups(
        FileCodeGroup firstCodeGroup, FileCodeGroup secondCodeGroup)
    {
        if (firstCodeGroup.Equals(secondCodeGroup))
        {
            Console.WriteLine("The two code groups are equal.");
            return true;
        }
        else 
        {
            Console.WriteLine("The two code groups are not equal.");
            return false;
        }
    }

    // Retrieve the resolved policy based on Evidence from the executing 
    // assembly found in the specified code group.
    private static string ResolveEvidence(CodeGroup fileCodeGroup)
    {
        string policyString = "";

        // Resolve the policy based on evidence in the executing assembly.
        Assembly assembly = typeof(Members).Assembly;
        Evidence executingEvidence = assembly.Evidence;

        PolicyStatement policy = fileCodeGroup.Resolve(executingEvidence);

        if (policy != null)
        {
            policyString = policy.ToString();
        }

        return policyString;
    }

    // Retrieve the resolved code group based on the Evidence from 
    // the executing assembly found in the specified code group.
    private static FileCodeGroup ResolveGroupToEvidence(
        FileCodeGroup fileCodeGroup)
    {
        // Resolve matching code groups to the executing assembly.
        Assembly assembly = typeof(Members).Assembly;
        Evidence evidence = assembly.Evidence;
        CodeGroup codeGroup = 
            fileCodeGroup.ResolveMatchingCodeGroups(evidence);

        return (FileCodeGroup)codeGroup;
    }

    // If a domain attribute is not found in the specified FileCodeGroup,
    // add a child XML element identifying a custom membership condition.
    private static void addXmlMember(ref FileCodeGroup fileCodeGroup)
    {
        SecurityElement xmlElement = fileCodeGroup.ToXml();

        SecurityElement rootElement = new SecurityElement("CodeGroup");

        if (xmlElement.Attribute("domain") == null) 
        {
            SecurityElement newElement = 
                new SecurityElement("CustomMembershipCondition");
            newElement.AddAttribute("class","CustomMembershipCondition");
            newElement.AddAttribute("version","1");
            newElement.AddAttribute("domain","contoso.com");

            rootElement.AddChild(newElement);

            fileCodeGroup.FromXml(rootElement);
        }

        Console.WriteLine("Added a custom membership condition:");
        Console.WriteLine(rootElement.ToString());
    }

    // Print the properties of the specified code group to the console.
    private static void PrintCodeGroup(CodeGroup codeGroup)
    {
        // Compare the type of the specified object with the FileCodeGroup
        // type.
        if (!codeGroup.GetType().Equals(typeof(FileCodeGroup)))
        {
            throw new ArgumentException("Expected the FileCodeGroup type.");
        }
        
        string codeGroupName = codeGroup.Name;
        string membershipCondition = codeGroup.MembershipCondition.ToString();
        string permissionSetName = codeGroup.PermissionSetName;

        int hashCode = codeGroup.GetHashCode();

        string mergeLogic = "";
        if (codeGroup.MergeLogic.Equals("Union"))
        {
            mergeLogic = " with Union merge logic";
        }

        // Retrieve the class path for FileCodeGroup.
        string fileGroupClass = codeGroup.ToString();

        // Write summary to the console window.
        Console.WriteLine("\n*** " + fileGroupClass + " summary ***");
        Console.Write("A FileCodeGroup named ");
        Console.Write(codeGroupName + mergeLogic);
        Console.Write(" has been created with hash code" + hashCode + ".");
        Console.Write("This code group contains a " + membershipCondition);
        Console.Write(" membership condition with the ");
        Console.Write(permissionSetName + " permission set. ");

        Console.Write("The code group has the following security policy: ");
        Console.WriteLine(ResolveEvidence(codeGroup));

        int childCount = codeGroup.Children.Count;
        if (childCount > 0 )
        {
            Console.Write("There are " + childCount);
            Console.WriteLine(" child code groups in this code group.");

            // Iterate through the child code groups to display their names
            // and remove them from the specified code group.
            for (int i=0; i < childCount; i++)
            {
                // Get child code group as type FileCodeGroup.
                FileCodeGroup childCodeGroup = 
                    (FileCodeGroup)codeGroup.Children[i];
                
                Console.Write("Removing the " + childCodeGroup.Name + ".");
                // Remove child code group.
                codeGroup.RemoveChild(childCodeGroup);
            }

            Console.WriteLine();
        }
        else
        {
            Console.Write("There are no child code groups");
            Console.WriteLine(" in this code group.");
        }
    }
}
//
// This sample produces the following output:
//
// The two code groups are equal.
// Added a custom membership condition:
// <CustomMembershipCondition class="CustomMembershipCondition"
//                                version="1"
//                                domain="contoso.com"/>
// Comparing the resolved code group with the initial code group.
// The two code groups are not equal.
// 
// *** System.Security.Policy.FileCodeGroup summary ***
// A FileCodeGroup named  with Union merge logic has been created with hash
// code 113151473. This code group contains a Zone - Intranet membership
// condition with the Same directory FileIO - NoAccess permission set. The
// code group has the following security policy:
// There are 1 child code groups in this code group.
// Removing the Read-only group.
// This sample completed successfully; press Enter to exit.

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 groupes de code sont les blocs de construction de la stratégie de sécurité d’accès au code. Chaque niveau de stratégie se compose d’un groupe de code racine qui peut avoir des groupes de code enfants. Chaque groupe de code enfant peut avoir ses propres groupes de codes enfants ; ce comportement s’étend à n’importe quel nombre de niveaux, formant une arborescence. Chaque groupe de codes a une condition d’appartenance qui détermine si un assembly donné lui appartient en fonction de la preuve de cet assembly. Seuls les groupes de code dont les conditions d’appartenance correspondent à un assembly donné et leurs groupes de codes enfants appliquent la stratégie.

FileCodeGroup a la même sémantique de correspondance enfant que UnionCodeGroup. Toutefois, FileCodeGroup retourne un jeu d’autorisations contenant un calculé FileIOPermission dynamiquement qui accorde l’accès au fichier au répertoire à partir duquel le code est exécuté ; UnionCodeGroup retourne uniquement un jeu d’autorisations statique. Le type d’accès au fichier accordé est passé en tant que paramètre au constructeur.

Ce groupe de codes correspond uniquement aux assemblys exécutés sur un protocole de fichier, c’est-à-dire aux assemblys qui ont des URL qui pointent vers un fichier ou un chemin UNC.

Constructeurs

FileCodeGroup(IMembershipCondition, FileIOPermissionAccess)
Obsolète.

Initialise une nouvelle instance de la classe FileCodeGroup.

Propriétés

AttributeString
Obsolète.

Obtient une chaîne représentant les attributs de l'instruction de stratégie pour le groupe de codes.

Children
Obsolète.

Obtient ou définit une liste triée des groupes de codes enfants d'un groupe de codes.

(Hérité de CodeGroup)
Description
Obsolète.

Obtient ou définit la description du groupe de codes.

(Hérité de CodeGroup)
MembershipCondition
Obsolète.

Obtient ou définit la condition d'appartenance du groupe de codes.

(Hérité de CodeGroup)
MergeLogic
Obsolète.

Obtient la logique de fusion.

Name
Obsolète.

Obtient ou définit le nom du groupe de codes.

(Hérité de CodeGroup)
PermissionSetName
Obsolète.

Obtient le nom du jeu d'autorisations nommé pour le groupe de codes.

PolicyStatement
Obsolète.

Obtient ou définit l'instruction de stratégie associée au groupe de codes.

(Hérité de CodeGroup)

Méthodes

AddChild(CodeGroup)
Obsolète.

Ajoute un groupe de codes enfant au groupe de codes actuel.

(Hérité de CodeGroup)
Copy()
Obsolète.

Effectue une copie complète du groupe de codes actuel.

CreateXml(SecurityElement, PolicyLevel)
Obsolète.

En cas de substitution dans une classe dérivée, sérialise des propriétés et un état interne spécifique à un groupe de codes dérivé et ajoute la sérialisation au SecurityElement spécifié.

(Hérité de CodeGroup)
Equals(CodeGroup, Boolean)
Obsolète.

Détermine si le groupe de codes spécifié est équivalent au groupe de codes actuel, en vérifiant également les groupes de codes enfants, si cela est spécifié.

(Hérité de CodeGroup)
Equals(Object)
Obsolète.

Détermine si le groupe de codes spécifié est équivalent au groupe de codes actuel.

FromXml(SecurityElement)
Obsolète.

Reconstruit un objet de sécurité avec un état donné à partir d'un codage XML.

(Hérité de CodeGroup)
FromXml(SecurityElement, PolicyLevel)
Obsolète.

Reconstruit un objet de sécurité avec un état et un niveau de stratégie donnés à partir d'un codage XML.

(Hérité de CodeGroup)
GetHashCode()
Obsolète.

Obtient le code de hachage du groupe de codes actif.

GetType()
Obsolète.

Obtient le Type de l'instance actuelle.

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

Crée une copie superficielle du Object actuel.

(Hérité de Object)
ParseXml(SecurityElement, PolicyLevel)
Obsolète.

En cas de substitution dans une classe dérivée, reconstruit des propriétés et un état interne spécifique à un groupe de codes dérivé du SecurityElement spécifié.

(Hérité de CodeGroup)
RemoveChild(CodeGroup)
Obsolète.

Supprime le groupe de codes enfants spécifié.

(Hérité de CodeGroup)
Resolve(Evidence)
Obsolète.

Résout la stratégie pour le groupe de codes et ses descendants pour un ensemble de preuves.

ResolveMatchingCodeGroups(Evidence)
Obsolète.

Résout des groupes de codes correspondants.

ToString()
Obsolète.

Retourne une chaîne qui représente l'objet actuel.

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

Crée un codage XML de l’objet de sécurité et de son état actuel.

(Hérité de CodeGroup)
ToXml(PolicyLevel)
Obsolète.

Crée un codage XML de l'objet de sécurité, de son état actuel et du niveau de stratégie dans lequel le code existe.

(Hérité de CodeGroup)

S’applique à

Produit Versions (Obsolète)
.NET (6, 7, 8, 9)
.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
.NET Standard 2.0
Windows Desktop 3.0, 3.1 (5, 6, 7, 8, 9)