Exibir arquivos de usuário

Concluído

Antes que um usuário possa baixar um arquivo, precisamos mostrar uma lista de arquivos disponíveis. Neste módulo do Learn, os arquivos estarão no diretório raiz OneDrive for Business usuário. Talvez você queira descartar um ou dois arquivos para iniciar. Você pode acessar sua instância do OneDrive for Business navegando até https://www.office.com/, entrando e selecionando o ícone do OneDrive.

Captura de tela que mostra a lista Arquivo.

Decidir quais permissões seu aplicativo requer

Todos os dados expostos por Microsoft Graph são protegidos. Seu aplicativo precisa ter as permissões corretas concedidas para accessá-lo. A permissão necessária depende do tipo de informação que seu aplicativo precisa acessar. Por exemplo, para acessar o calendário do usuário, seu aplicativo precisa ter a permissão Calendars.Read usuário. Para ler os arquivos de um usuário, seu aplicativo precisa Files.Read permissão. Posteriormente, quando for a hora de carregar arquivos, seu aplicativo precisará da Files.ReadWrite permissão. A lista exata das permissões necessárias para cada operação está disponível na referência Microsoft Graph API.

Se seu aplicativo carregar diferentes tipos de dados, os usuários deverão conceder a ele várias permissões necessárias para acessar essas informações. Em seu aplicativo, solicite apenas as permissões necessárias. Neste módulo, seu aplicativo solicita permissão para ler seus arquivos inicialmente e só solicita permissão de leitura/gravação quando você tenta carregar um arquivo. Esse padrão é chamado dee é a maneira recomendada de solicitar permissões. Com o consentimento dinâmico, os usuários controlam os dados que compartilham com os aplicativos que usam, o que minimiza os riscos de segurança.

Especificar as permissões necessárias

A lista de permissões concedidas ao seu aplicativo é inserida diretamente no token de acesso. O padrão OAuth os chama escopos. Quando seu aplicativo usa a Biblioteca de Autenticação da Microsoft para obter o token de acesso, ele precisa incluir uma lista de escopos na solicitação para Azure Active Directory. Cada operação no Microsoft Graph tem sua própria lista de escopos organizados do menor para o mais privilegiado. Qualquer um deles funcionará, portanto, escolha os escopos menos privilegiados que funcionarão entre as operações usadas em seu aplicativo.

O aplicativo de exemplo armazena a solicitação atual da Biblioteca de Autenticação da Microsoft em uma variável global chamada msalRequest. Inicialmente, ele contém uma matriz vazia de escopos.

const msalRequest = { scopes: [] };

Aqui está a função auxiliar usada pelo aplicativo de exemplo para adicionar mais escopos à solicitação.

function ensureScope (scope) {
  if (!msalRequest.scopes.some((s) => s.toLowerCase() === scope.toLowerCase())) {
    msalRequest.scopes.push(scope);
  }
}

A ideia é que o aplicativo solicita permissões quando precisa delas. Por exemplo, aqui está o código para baixar uma lista de arquivos da pasta raiz OneDrive for Business usuário.

async function getFiles() {
  ensureScope('files.read');
  try {
    const response = await graphClient
      .api('/me/drive/root/children')
      .select('id,name,folder,package')
      .get();
    return response.value;
  } catch (error) {
    console.error(error);
  }
}

A chamada para ensureScope() garante que a permissão files.read seja incluída no token de acesso que será usado para chamar Microsoft Graph.

O Microsoft Graph SDK cuida de chamar a Biblioteca de Autenticação da Microsoft usando o objeto msalRequest e faz isso para cada Microsoft Graph chamada. Embora essa atividade possa parecer um desperdício, não é. A Biblioteca de Autenticação da Microsoft reutiliza automaticamente o mesmo token de acesso até que o antigo expire ou os escopos de permissão sejam alterados. Na parte superior do graph.js, você pode ver o código em que essa instrução está configurada.

const authProvider = {
  getAccessToken: async () => {
    return await getToken();
  }
};
const graphClient = MicrosoftGraph.Client.initWithMiddleware({ authProvider });

Primeiro, o código declara um authProvider, que é um objeto JSON que contém a getAccessToken() função. Essa função chama getToken(), que é uma função no arquivo auth.js que chama a Biblioteca de Autenticação da Microsoft. Você pode conferir isso se desejar. O objeto authProvider é passado para o SDK da Microsoft, que chamará getAccessToken() sempre que necessário, para que seu código não precise fazer isso.

Recuperar os arquivos no diretório raiz do OneDrive do usuário usando Microsoft Graph

Para obter essa lista de arquivos, use o /me/drive/root/children recurso. É mais fácil obter os arquivos na pasta raiz do diretório raiz do OneDrive do usuário atual porque o Microsoft Graph fornece atalhos como /me e /root. Por exemplo, para enumerar arquivos na pasta Documentos de outro usuário, você precisaria pesquisar a ID de usuário do usuário e a ID do item da pasta /Documents e acessar /users/{user-id}/drive/items/{item-id}/children.

Dica

Microsoft Graph fornece acesso a arquivos no OneDrive, OneDrive for Business e SharePoint Online. O Microsoft Teams e outros Microsoft 365 serviços de armazenamento de arquivos no OneDrive for Business e no SharePoint Online. As operações de arquivo são as mesmas, mas os recursos (URLs) são um pouco diferentes para cada um desses serviços.

Essa solicitação GET é expressa no SDK Microsoft Graph da seguinte maneira:

const response = await graphClient
  .api('/me/drive/root/children')
  .get();

Você pode tornar a chamada mais eficiente especificando as colunas de dados necessárias. Essa tarefa é tratada usando o parâmetro $select= query cadeia de caracteres em REST (com base no padrão OData). O SDK facilita o fornecimento de uma select() função. Observe que as funções podem ser encadeadas para facilitar a leitura da solicitação.

const response = await graphClient
    .api('/me/drive/root/children')
    .select('id,name,folder,package')
    .get();

Próximas etapas

Vamos colocar tudo o que você aprendeu para praticar e estender seu aplicativo para mostrar uma lista de arquivos na pasta raiz OneDrive for Business usuário.