Übung: Sicherstellen des sicheren Zugriffs mit der Zugriffssteuerungsliste
In dieser Übung aktualisieren Sie den Code, der für den Import lokaler Markdowndateien verantwortlich ist, indem Sie ACLs für ausgewählte Elemente konfigurieren.
Vorbereitende Schritte
Bevor Sie diese Übung durchführen, müssen Sie die vorherige Übung in diesem Modul abschließen.
Importieren von Inhalten, die für alle Personen in der Organisation verfügbar sind
Als Sie den Code zum Importieren externer Inhalte in der vorherigen Übung implementiert haben, haben Sie ihn so konfiguriert, dass er für alle Personen in der Organisation verfügbar ist. Hier sehen Sie den Code, den Sie verwendet haben:
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
}
}
};
});
}
Sie haben die Zugriffssteuerungsliste so konfiguriert, dass sie allen Zugriff gewährt. Passen Sie ihn für ausgewählte Markdownseiten an, die Sie importieren.
Importieren von Inhalten, die für ausgewählte Benutzer verfügbar sind
Konfigurieren Sie zunächst eine der Zu importierenden Seiten so, dass nur ein bestimmter Benutzer darauf zugreifen kann.
Im Webbrowser:
Navigieren Sie zum Azure-Portal unter, https://portal.azure.com und melden Sie sich mit Ihrem Geschäfts-, Schul- oder Unikonto an.
Wählen Sie auf der Randleiste Microsoft Entra ID aus.
Wählen Sie im Navigationsbereich Benutzer aus.
Öffnen Sie in der Liste der Benutzer einen der Benutzer, indem Sie ihren Namen auswählen.
Kopieren Sie den Wert der Objekt-ID-Eigenschaft .
Verwenden Sie diesen Wert, um eine neue ACL für eine bestimmte Markdownseite zu definieren.
Im Code-Editor:
Öffnen Sie die ContentService.cs Datei, und suchen Sie die
Transform
-Methode.Definieren Sie innerhalb des
Select
Delegaten die Standard-ACL, die für alle importierten Elemente gilt:var acl = new Acl { Type = AclType.Everyone, Value = "everyone", AccessType = AccessType.Grant };
Überschreiben Sie als Nächstes die Standard-ACL für die Markdowndatei, deren Name auf
use-the-api.md
endet:if (a.RelativePath!.EndsWith("use-the-api.md")) { acl = new() { Type = AclType.User, // AdeleV Value = "6de8ec04-6376-4939-ab47-83a2c85ab5f5", AccessType = AccessType.Grant }; }
Aktualisieren Sie abschließend den Code, der das externe Element zurückgibt, um die definierte ACL zu verwenden:
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 } };
Die aktualisierte
Transform
Methode sieht wie folgt aus: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 } }; }); }
Speichern Sie Ihre Änderungen.
Importieren von Inhalten, die für eine ausgewählte Gruppe verfügbar sind
Nun erweitern wir den Code, sodass nur eine ausgewählte Gruppe von Benutzern auf eine andere Seite zugreifen kann.
Im Webbrowser:
- Navigieren Sie zum Azure-Portal unter, https://portal.azure.com und melden Sie sich mit Ihrem Geschäfts-, Schul- oder Unikonto an.
- Wählen Sie auf der Randleiste Microsoft Entra ID aus.
- Wählen Sie im Navigationsbereich Gruppen aus.
- Öffnen Sie in der Liste der Gruppen eine der Gruppen, indem Sie deren Namen auswählen.
- Kopieren Sie den Wert der Eigenschaft Objekt-ID .
Verwenden Sie diesen Wert, um eine neue ACL für eine bestimmte Markdownseite zu definieren.
Im Code-Editor:
Öffnen Sie die ContentService.cs-Datei , und suchen Sie die
Transform
-Methode.Erweitern Sie die zuvor definierte
if
Klausel mit einer zusätzlichen Bedingung, um die ACL für die Markdowndatei mit dem Namen zu definieren, der auftraverse-the-graph.md
endet: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 }; }
Die aktualisierte
Transform
Methode sieht wie folgt aus: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 } }; }); }
Speichern Sie Ihre Änderungen.
Anwenden der neuen ACLs
Der letzte Schritt besteht darin, die neu konfigurierten ACLs anzuwenden.
- Öffnen Sie ein Terminal, und ändern Sie das Arbeitsverzeichnis in Ihr Projekt.
- Erstellen Sie das Projekt, indem Sie den
dotnet build
Befehl ausführen. - Beginnen Sie mit dem Laden des Inhalts, indem Sie den
dotnet run -- load-content
Befehl ausführen.