Exercício – Garantir o acesso seguro com a lista de controlo de acesso
Neste exercício, vai atualizar o código responsável pela importação de ficheiros markdowns locais com a configuração de ACLs em itens selecionados.
Antes de começar
Antes de realizar este exercício, certifique-se de que conclui o exercício anterior neste módulo.
Importar conteúdo disponível para todas as pessoas na organização
Quando implementou o código para importar conteúdo externo no exercício anterior, configurou-o para estar disponível para todas as pessoas na organização. Eis o código que utilizou:
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
}
}
};
});
}
Configurou a ACL para conceder acesso a todas as pessoas. Vamos ajustá-lo para as páginas de markdown selecionadas que está a importar.
Importar conteúdo disponível para selecionar utilizadores
Em primeiro lugar, configure uma das páginas que está a importar para estar acessível apenas a um utilizador específico.
No browser:
Navegue para o portal do Azure em https://portal.azure.com e inicie sessão com a sua conta escolar ou profissional.
Na barra lateral, selecione Microsoft Entra ID.
Na navegação, selecione Utilizadores.
Na lista de utilizadores, abra um dos utilizadores ao selecionar o respetivo nome.
Copie o valor da propriedade ID do Objeto .
Utilize este valor para definir uma nova ACL para uma página de markdown específica.
No editor de código:
Abra o ficheiro ContentService.cs e localize o
Transform
método .Dentro do
Select
delegado, defina a ACL predefinida que se aplica a todos os itens importados:var acl = new Acl { Type = AclType.Everyone, Value = "everyone", AccessType = AccessType.Grant };
Em seguida, substitua a ACL predefinida para o ficheiro markdown com o nome a terminar em
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 }; }
Por fim, atualize o código que devolve o item externo para utilizar a ACL definida:
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 } };
O método atualizado
Transform
tem o seguinte aspeto: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 } }; }); }
Salve suas alterações.
Importar conteúdo disponível para um grupo selecionado
Agora, vamos expandir o código para que outra página só seja acessível por um grupo de utilizadores selecionado.
No browser:
- Navegue para o portal do Azure em https://portal.azure.com e inicie sessão com a sua conta escolar ou profissional.
- Na barra lateral, selecione Microsoft Entra ID.
- Na navegação, selecione Grupos.
- Na lista de grupos, abra um dos grupos ao selecionar o respetivo nome.
- Copie o valor da propriedade ID do Objeto .
Utilize este valor para definir uma nova ACL para uma página de markdown específica.
No editor de código:
Abra o ficheiro ContentService.cs e localize o
Transform
métodoExpanda a cláusula definida
if
anteriormente, com uma condição adicional para definir a ACL para o ficheiro markdown com o nome a terminar emtraverse-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 }; }
O método atualizado
Transform
tem o seguinte aspeto: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 } }; }); }
Salve suas alterações.
Aplicar as novas ACLs
O passo final é aplicar as ACLs recentemente configuradas.
- Abra um terminal e altere o diretório de trabalho para o projeto.
- Crie o projeto ao executar o
dotnet build
comando . - Comece a carregar o conteúdo ao executar o
dotnet run -- load-content
comando .