Exercice - Garantir un accès sécurisé avec la liste de contrôle d’accès

Effectué

Dans cet exercice, vous mettez à jour le code responsable de l’importation des fichiers Markdowns locaux avec la configuration des listes de contrôle d’accès sur les éléments sélectionnés.

Avant de commencer

Avant d’effectuer cet exercice, veillez à effectuer l’exercice précédent de ce module.

Importer du contenu disponible pour tous les membres de l’organisation

Lorsque vous avez implémenté le code pour l’importation de contenu externe dans l’exercice précédent, vous l’avez configuré pour qu’il soit disponible pour tous les membres de l’organisation. Voici le code que vous avez utilisé :

static IEnumerable<ExternalItem> Transform(IEnumerable<DocsArticle> content)
{
  var baseUrl = new Uri("https://learn.microsoft.com/graph/");

  return content.Select(a =>
  {
    var docId = GetDocId(a.RelativePath ?? "");

    return new ExternalItem
    {
      Id = docId,
      Properties = new()
      {
        AdditionalData = new Dictionary<string, object> {
            { "title", a.Title ?? "" },
            { "description", a.Description ?? "" },
            { "url", new Uri(baseUrl, a.RelativePath!.Replace(".md", "")).ToString() }
        }
      },
      Content = new()
      {
        Value = a.Content ?? "",
        Type = ExternalItemContentType.Html
      },
      Acl = new()
      {
          new()
          {
            Type = AclType.Everyone,
            Value = "everyone",
            AccessType = AccessType.Grant
          }
      }
    };
  });
}

Vous avez configuré la liste de contrôle d’accès pour accorder l’accès à tout le monde. Nous allons l’ajuster pour les pages Markdown sélectionnées que vous importez.

Importer le contenu disponible pour certains utilisateurs

Tout d’abord, configurez l’une des pages que vous importez pour qu’elle soit accessible uniquement à un utilisateur spécifique.

Dans le navigateur web :

  1. Accédez au portail Azure à l’adresse https://portal.azure.com et connectez-vous avec votre compte professionnel ou scolaire.

  2. Dans la barre latérale, sélectionnez ID Microsoft Entra.

  3. Dans la navigation, sélectionnez Utilisateurs.

  4. Dans la liste des utilisateurs, ouvrez l’un des utilisateurs en sélectionnant leur nom.

  5. Copiez la valeur de la propriété ID d’objet .

    Capture d’écran du portail Azure avec un profil utilisateur ouvert.

Utilisez cette valeur pour définir une nouvelle liste de contrôle d’accès pour une page Markdown spécifique.

Dans l’éditeur de code :

  1. Ouvrez le fichier ContentService.cs et recherchez la Transform méthode .

  2. À l’intérieur du Select délégué, définissez la liste de contrôle d’accès par défaut qui s’applique à tous les éléments importés :

    var acl = new Acl
    {
      Type = AclType.Everyone,
      Value = "everyone",
      AccessType = AccessType.Grant
    };
    
  3. Ensuite, remplacez la liste de contrôle d’accès par défaut pour le fichier Markdown par le nom se terminant par use-the-api.md:

    if (a.RelativePath!.EndsWith("use-the-api.md"))
    {
      acl = new()
      {
        Type = AclType.User,
        // AdeleV
        Value = "6de8ec04-6376-4939-ab47-83a2c85ab5f5",
        AccessType = AccessType.Grant
      };
    }
    
  4. Enfin, mettez à jour le code qui retourne l’élément externe pour utiliser la liste de contrôle d’accès définie :

    return new ExternalItem
    {
      Id = docId,
      Properties = new()
      {
        AdditionalData = new Dictionary<string, object> {
          { "title", a.Title ?? "" },
          { "description", a.Description ?? "" },
          { "url", new Uri(baseUrl, a.RelativePath!.Replace(".md", "")).   ToString() }
        }
      },
      Content = new()
      {
        Value = a.Content ?? "",
        Type = ExternalItemContentType.Html
      },
      Acl = new()
      {
        acl
      }
    };
    
  5. La méthode mise à jour Transform se présente comme suit :

    static IEnumerable<ExternalItem> Transform(IEnumerable<DocsArticle>    content)
    {
      var baseUrl = new Uri("https://learn.microsoft.com/graph/");
    
      return content.Select(a =>
      {
        var acl = new Acl
        {
          Type = AclType.Everyone,
          Value = "everyone",
          AccessType = AccessType.Grant
        };
    
        if (a.RelativePath!.EndsWith("use-the-api.md"))
        {
          acl = new()
          {
            Type = AclType.User,
            // AdeleV
            Value = "6de8ec04-6376-4939-ab47-83a2c85ab5f5",
            AccessType = AccessType.Grant
          };
        }
    
        var docId = GetDocId(a.RelativePath ?? "");
    
        return new ExternalItem
        {
          Id = docId,
          Properties = new()
          {
            AdditionalData = new Dictionary<string, object> {
              { "title", a.Title ?? "" },
              { "description", a.Description ?? "" },
              { "url", new Uri(baseUrl, a.RelativePath!.Replace(".md", "")).   ToString() }
            }
          },
          Content = new()
          {
            Value = a.Content ?? "",
            Type = ExternalItemContentType.Html
          },
          Acl = new()
          {
            acl
          }
        };
      });
    }
    
  6. Enregistrez vos modifications.

Importer le contenu disponible pour un groupe sélectionné

À présent, nous allons étendre le code afin qu’une autre page ne soit accessible qu’à un groupe sélectionné d’utilisateurs.

Dans le navigateur web :

  1. Accédez au portail Azure à l’adresse https://portal.azure.com et connectez-vous avec votre compte professionnel ou scolaire.
  2. Dans la barre latérale, sélectionnez ID Microsoft Entra.
  3. Dans le volet de navigation, sélectionnez Groupes.
  4. Dans la liste des groupes, ouvrez l’un des groupes en sélectionnant leur nom.
  5. Copiez la valeur de la propriété Id d’objet .

Capture d’écran du portail Azure avec une page de groupe ouverte.

Utilisez cette valeur pour définir une nouvelle liste de contrôle d’accès pour une page Markdown spécifique.

Dans l’éditeur de code :

  1. Ouvrez le fichier ContentService.cs et recherchez la Transform méthode

  2. Étendez la clause précédemment définie if , avec une condition supplémentaire pour définir la liste de contrôle d’accès pour le fichier markdown dont le nom se termine par traverse-the-graph.md:

    if (a.RelativePath!.EndsWith("use-the-api.md"))
    {
      acl = new()
      {
        Type = AclType.User,
        // AdeleV
        Value = "6de8ec04-6376-4939-ab47-83a2c85ab5f5",
        AccessType = AccessType.Grant
      };
    }
    else if (a.RelativePath.EndsWith("traverse-the-graph.md"))
    {
      acl = new()
      {
        Type = AclType.Group,
        // Sales and marketing
        Value = "a9fd282f-4634-4cba-9dd4-631a2ee83cd3",
        AccessType = AccessType.Grant
      };
    }
    
  3. La méthode mise à jour Transform se présente comme suit :

    static IEnumerable<ExternalItem> Transform(IEnumerable<DocsArticle>    content)
    {
      var baseUrl = new Uri("https://learn.microsoft.com/graph/");
    
      return content.Select(a =>
      {
        var acl = new Acl
        {
          Type = AclType.Everyone,
          Value = "everyone",
          AccessType = AccessType.Grant
        };
    
        if (a.RelativePath!.EndsWith("use-the-api.md"))
        {
          acl = new()
          {
            Type = AclType.User,
            // AdeleV
            Value = "6de8ec04-6376-4939-ab47-83a2c85ab5f5",
            AccessType = AccessType.Grant
          };
        }
        else if (a.RelativePath.EndsWith("traverse-the-graph.md"))
        {
          acl = new()
          {
            Type = AclType.Group,
            // Sales and marketing
            Value = "a9fd282f-4634-4cba-9dd4-631a2ee83cd3",
            AccessType = AccessType.Grant
          };
        }
    
        var docId = GetDocId(a.RelativePath ?? "");
    
        return new ExternalItem
        {
          Id = docId,
          Properties = new()
          {
            AdditionalData = new Dictionary<string, object> {
                { "title", a.Title ?? "" },
                { "description", a.Description ?? "" },
                { "url", new Uri(baseUrl, a.RelativePath!.Replace(".md",    "")).ToString() }
            }
          },
          Content = new()
          {
            Value = a.Content ?? "",
            Type = ExternalItemContentType.Html
          },
          Acl = new()
          {
              acl
          }
        };
      });
    }
    
  4. Enregistrez vos modifications.

Appliquer les nouvelles listes de contrôle d’accès

La dernière étape consiste à appliquer les listes de contrôle d’accès nouvellement configurées.

  1. Ouvrez un terminal et remplacez le répertoire de travail par votre projet.
  2. Générez le projet en exécutant la dotnet build commande .
  3. Commencez à charger le contenu en exécutant la dotnet run -- load-content commande .