Exercice - Garantir un accès sécurisé avec la liste de contrôle d’accès
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 :
Accédez au portail Azure à l’adresse https://portal.azure.com et connectez-vous avec votre compte professionnel ou scolaire.
Dans la barre latérale, sélectionnez ID Microsoft Entra.
Dans la navigation, sélectionnez Utilisateurs.
Dans la liste des utilisateurs, ouvrez l’un des utilisateurs en sélectionnant leur nom.
Copiez la valeur de la propriété ID d’objet .
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 :
Ouvrez le fichier ContentService.cs et recherchez la
Transform
méthode .À 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 };
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 }; }
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 } };
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 } }; }); }
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 :
- Accédez au portail Azure à l’adresse https://portal.azure.com et connectez-vous avec votre compte professionnel ou scolaire.
- Dans la barre latérale, sélectionnez ID Microsoft Entra.
- Dans le volet de navigation, sélectionnez Groupes.
- Dans la liste des groupes, ouvrez l’un des groupes en sélectionnant leur nom.
- Copiez la valeur de la propriété Id d’objet .
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 :
Ouvrez le fichier ContentService.cs et recherchez la
Transform
méthodeÉ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 partraverse-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 }; }
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 } }; }); }
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.
- Ouvrez un terminal et remplacez le répertoire de travail par votre projet.
- Générez le projet en exécutant la
dotnet build
commande . - Commencez à charger le contenu en exécutant la
dotnet run -- load-content
commande .