Esercizio - Garantire l'accesso sicuro con l'elenco di controllo di accesso
In questo esercizio si aggiorna il codice responsabile dell'importazione dei file markdown locali con la configurazione degli elenchi di controllo di accesso per gli elementi selezionati.
Prima di iniziare
Prima di eseguire questo esercizio, assicurarsi di completare l'esercizio precedente in questo modulo.
Importare contenuto disponibile per tutti gli utenti dell'organizzazione
Quando è stato implementato il codice per l'importazione di contenuto esterno nell'esercizio precedente, è stato configurato per essere disponibile per tutti gli utenti dell'organizzazione. Ecco il codice usato:
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
}
}
};
});
}
L'elenco di controllo di accesso è stato configurato per concedere l'accesso a tutti. È possibile modificarlo per le pagine markdown selezionate da importare.
Importare il contenuto disponibile per selezionare gli utenti
Configurare prima di tutto una delle pagine importate per essere accessibili solo a un utente specifico.
Nel Web browser:
Passare al portale di Azure all'indirizzo https://portal.azure.com e accedere con l'account aziendale o dell'istituto di istruzione.
Nella barra laterale selezionare Microsoft Entra ID.From the sidebar, select Microsoft Entra ID.
Nel riquadro di spostamento selezionare Utenti.
Nell'elenco degli utenti aprire uno degli utenti selezionando il nome.
Copiare il valore della proprietà ID oggetto .
Usare questo valore per definire un nuovo elenco di controllo di accesso per una pagina markdown specifica.
Nell'editor di codice:
Aprire il file ContentService.cs e individuare il
Transform
metodo .All'interno del
Select
delegato definire l'ACL predefinito che si applica a tutti gli elementi importati:var acl = new Acl { Type = AclType.Everyone, Value = "everyone", AccessType = AccessType.Grant };
Eseguire quindi l'override dell'elenco di controllo di accesso predefinito per il file markdown con il nome che termina con
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 }; }
Aggiornare infine il codice che restituisce l'elemento esterno per usare l'ACL definito:
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 } };
Il metodo aggiornato
Transform
ha l'aspetto seguente: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 } }; }); }
Salvare le modifiche.
Importare il contenuto disponibile per un gruppo selezionato
A questo punto, estendere il codice in modo che un'altra pagina sia accessibile solo da un gruppo selezionato di utenti.
Nel Web browser:
- Passare al portale di Azure all'indirizzo https://portal.azure.com e accedere con l'account aziendale o dell'istituto di istruzione.
- Nella barra laterale selezionare Microsoft Entra ID.From the sidebar, select Microsoft Entra ID.
- Nel riquadro di spostamento selezionare Gruppi.
- Nell'elenco dei gruppi aprire uno dei gruppi selezionando il relativo nome.
- Copiare il valore della proprietà Id oggetto .
Usare questo valore per definire un nuovo elenco di controllo di accesso per una pagina markdown specifica.
Nell'editor di codice:
Aprire il file ContentService.cs e individuare il
Transform
metodoEstendere la clausola definita
if
in precedenza, con una condizione aggiuntiva per definire l'ACL per il file markdown con il nome che termina contraverse-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 }; }
Il metodo aggiornato
Transform
ha l'aspetto seguente: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 } }; }); }
Salvare le modifiche.
Applicare i nuovi ACL
Il passaggio finale consiste nell'applicare gli ACL appena configurati.
- Aprire un terminale e impostare la directory di lavoro sul progetto.
- Compilare il progetto eseguendo il
dotnet build
comando . - Avviare il caricamento del contenuto eseguendo il
dotnet run -- load-content
comando .