Übung: Sicherstellen des sicheren Zugriffs mit der Zugriffssteuerungsliste

Abgeschlossen

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:

  1. Navigieren Sie zum Azure-Portal unter, https://portal.azure.com und melden Sie sich mit Ihrem Geschäfts-, Schul- oder Unikonto an.

  2. Wählen Sie auf der Randleiste Microsoft Entra ID aus.

  3. Wählen Sie im Navigationsbereich Benutzer aus.

  4. Öffnen Sie in der Liste der Benutzer einen der Benutzer, indem Sie ihren Namen auswählen.

  5. Kopieren Sie den Wert der Objekt-ID-Eigenschaft .

    Screenshot: Azure-Portal mit geöffnetem Benutzerprofil

Verwenden Sie diesen Wert, um eine neue ACL für eine bestimmte Markdownseite zu definieren.

Im Code-Editor:

  1. Öffnen Sie die ContentService.cs Datei, und suchen Sie die Transform -Methode.

  2. 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
    };
    
  3. Überschreiben Sie als Nächstes die Standard-ACL für die Markdowndatei, deren Name auf use-the-api.mdendet:

    if (a.RelativePath!.EndsWith("use-the-api.md"))
    {
      acl = new()
      {
        Type = AclType.User,
        // AdeleV
        Value = "6de8ec04-6376-4939-ab47-83a2c85ab5f5",
        AccessType = AccessType.Grant
      };
    }
    
  4. 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
      }
    };
    
  5. 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
          }
        };
      });
    }
    
  6. 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:

  1. Navigieren Sie zum Azure-Portal unter, https://portal.azure.com und melden Sie sich mit Ihrem Geschäfts-, Schul- oder Unikonto an.
  2. Wählen Sie auf der Randleiste Microsoft Entra ID aus.
  3. Wählen Sie im Navigationsbereich Gruppen aus.
  4. Öffnen Sie in der Liste der Gruppen eine der Gruppen, indem Sie deren Namen auswählen.
  5. Kopieren Sie den Wert der Eigenschaft Objekt-ID .

Screenshot: Azure-Portal mit geöffneter Gruppenseite

Verwenden Sie diesen Wert, um eine neue ACL für eine bestimmte Markdownseite zu definieren.

Im Code-Editor:

  1. Öffnen Sie die ContentService.cs-Datei , und suchen Sie die Transform -Methode.

  2. 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 auf traverse-the-graph.mdendet:

    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. 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
          }
        };
      });
    }
    
  4. Speichern Sie Ihre Änderungen.

Anwenden der neuen ACLs

Der letzte Schritt besteht darin, die neu konfigurierten ACLs anzuwenden.

  1. Öffnen Sie ein Terminal, und ändern Sie das Arbeitsverzeichnis in Ihr Projekt.
  2. Erstellen Sie das Projekt, indem Sie den dotnet build Befehl ausführen.
  3. Beginnen Sie mit dem Laden des Inhalts, indem Sie den dotnet run -- load-content Befehl ausführen.