Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
No SDK de Arquivos do MIP, mip::FileHandler expõe as operações que leem e gravam rótulos ou proteção em tipos de arquivo com suporte interno.
Tipos de arquivo compatíveis
- Formatos de arquivo do Office com base no OPC (Office 2010 e posterior)
- Formatos de arquivo herdados do Office (Office 2007)
- Suporte a PFILE genérico
- Arquivos compatíveis com Adobe XMP
Funções do manipulador de arquivos
mip::FileHandler expõe métodos para ler, gravar e remover rótulos e informações de proteção. Para obter a lista completa, consulte a Referência de API.
Este artigo aborda os seguintes métodos:
GetLabel()SetLabel()DeleteLabel()RemoveProtection()CommitAsync()
Requisitos
Para criar um FileHandler para trabalhar com um arquivo específico, forneça:
- Um
FileProfile - Um
FileEngineadicionado aoFileProfile - Uma classe que herde
mip::FileHandler::Observer
Criar um manipulador de arquivo
A primeira etapa no gerenciamento de arquivos no SDK de Arquivo é criar um FileHandler objeto. Essa classe inclui a funcionalidade necessária para obter, definir, atualizar, excluir e confirmar alterações de rótulo em arquivos.
Crie a FileHandler chamando a função CreateFileHandlerAsync de FileEngine usando o padrão promessa/futuro.
CreateFileHandlerAsync aceita os seguintes parâmetros: o caminho para o arquivo a ser lido ou modificado, o caminho a ser usado para a geração de relatórios de auditoria, um sinalizador que habilita a descoberta de auditoria, o mip::FileHandler::Observer para notificações de eventos assíncronas e a promise para o FileHandler.
Note
Implemente a mip::FileHandler::Observer classe em uma classe derivada porque CreateFileHandler requer o Observer objeto.
auto createFileHandlerPromise = std::make_shared<std::promise<std::shared_ptr<mip::FileHandler>>>();
auto createFileHandlerFuture = createFileHandlerPromise->get_future();
fileEngine->CreateFileHandlerAsync(filePath, filePath, true, std::make_shared<FileHandlerObserver>(), createFileHandlerPromise);
auto fileHandler = createFileHandlerFuture.get();
Depois de criar o FileHandler objeto, você pode executar operações de arquivo (get/set/delete/commit).
Ler um rótulo
Requisitos de metadados
Ler metadados com êxito de um arquivo e traduzi-los para algo que os aplicativos podem usar tem alguns requisitos.
- O rótulo que está sendo lido ainda deve existir no serviço do Microsoft 365. Se alguém excluiu o rótulo, o SDK não obtém informações sobre esse rótulo e retorna um erro.
- Os metadados do arquivo devem estar intactos. Esses metadados incluem:
- Atributo1
- Attribute2
GetLabel()
Depois de criar o manipulador que aponta para um arquivo específico, leia o rótulo de forma síncrona chamando fileHandler->GetLabel(). O método retorna um mip::ContentLabel objeto que contém todas as informações sobre o rótulo aplicado.
auto label = fileHandler->GetLabel();
Você pode ler dados de rótulo do label objeto e passá-los para qualquer outro componente ou funcionalidade no aplicativo.
Definir um rótulo
Definir um rótulo é um processo de duas partes. Depois de criar um manipulador que aponte para o arquivo em questão, defina o rótulo chamando FileHandler->SetLabel() com alguns parâmetros: mip::Label, mip::LabelingOptionse mip::ProtectionOptions. Primeiro, converta o identificador do rótulo em um rótulo e, em seguida, defina as opções de rotulagem.
Resolver ID do rótulo para mip::Label
O primeiro parâmetro da função SetLabel é um mip::Label. Geralmente, o aplicativo funciona com identificadores de rótulo em vez de rótulos. Resolva o identificador do rótulo no mip::Label chamando GetLabelById no mecanismo de arquivo ou política:
std::shared_ptr<mip::Label> label = engine->GetLabelById(labelId);
Opções de rotulagem
O segundo parâmetro necessário para definir o rótulo é mip::LabelingOptions.
LabelingOptions especifica mais informações sobre o rótulo, como AssignmentMethod e a justificativa para uma ação.
-
mip::AssignmentMethodé um enumerador que tem três valores:STANDARD,PRIVILEGEDouAUTO. Revise a referênciamip::AssignmentMethodpara obter mais detalhes. - Forneça justificativa somente se a política de serviço exigir e ao reduzir a sensibilidade existente de um arquivo.
Este snippet demonstra como criar o mip::LabelingOptions objeto e definir a justificativa e a mensagem de downgrade.
auto labelingOptions = mip::LabelingOptions(mip::AssignmentMethod::STANDARD);
labelingOptions.SetDowngradeJustification(true, "Because I made an educated decision based upon the contents of this file.");
Configurações de proteção
Alguns aplicativos podem precisar executar operações em nome de uma identidade de usuário delegada. A mip::ProtectionSettings classe permite que o aplicativo defina a identidade delegada por manipulador. Anteriormente, as classes do mecanismo realizavam a delegação. Esse design teve desvantagens significativas na sobrecarga do aplicativo e nas viagens de ida e volta do serviço. Mover as configurações de usuário delegadas para mip::ProtectionSettings e torná-las parte da classe de manipulador elimina essa sobrecarga, o que melhora o desempenho de aplicativos que executam muitas operações em nome de diversos conjuntos de identidades de usuário.
Se você não precisar de delegação, passe mip::ProtectionSettings() para a função SetLabel. Se você precisar de delegação, crie um mip::ProtectionSettings objeto e defina o endereço de email delegado:
mip::ProtectionSettings protectionSettings;
protectionSettings.SetDelegatedUserEmail("alice@contoso.com");
Definir o rótulo
Depois de buscar mip::Label usando a ID, defina as opções de rotulagem e, opcionalmente, defina as configurações de proteção, você pode definir o rótulo no manipulador.
Se você não tiver definido as configurações de proteção, defina o rótulo chamando SetLabel no manipulador:
fileHandler->SetLabel(label, labelingOptions, mip::ProtectionSettings());
Se você precisar de configurações de proteção para executar uma operação delegada, use:
fileHandler->SetLabel(label, labelingOptions, protectionSettings);
Depois de definir o rótulo no arquivo que o manipulador faz referência, confirme a alteração e escreva um arquivo no disco ou crie um fluxo de saída.
Cometer alterações
A etapa final para confirmar uma alteração em um arquivo no SDK da PIM é confirmar a alteração. Usando a função FileHandler->CommitAsync().
Para implementar a função de confirmação, volte à promessa/futuro, criando uma promessa para um bool. A CommitAsync() função retornará true se a operação tiver sido bem-sucedida ou falsa se tiver falhado por algum motivo.
Depois de criar o promise e o future, chame CommitAsync() e forneça dois parâmetros: o caminho do arquivo de saída (std::string) e a promessa. Por fim, obtenha o resultado obtendo o valor do future objeto.
auto commitPromise = std::make_shared<std::promise<bool>>();
auto commitFuture = commitPromise->get_future();
fileHandler->CommitAsync(outputFile, commitPromise);
auto wasCommitted = commitFuture.get();
Importante
Os FileHandler arquivos existentes não serão atualizados ou substituídos. Você deve implementar a substituição no arquivo que está rotulando.
Se você escrever um rótulo paraFileA.docx, CommitAsync() criará uma cópia do arquivo, FileB.docx, com o rótulo aplicado. Escreva o código para remover ou renomear FileA.docx e renomear FileB.docx.
Excluir um rótulo
auto createFileHandlerPromise = std::make_shared<std::promise<std::shared_ptr<mip::FileHandler>>>();
auto createFileHandlerFuture = createFileHandlerPromise->get_future();
mEngine->CreateFileHandlerAsync(filePath, filePath, true, std::make_shared<FileHandlerObserver>(), createFileHandlerPromise);
auto fileHandler = createFileHandlerFuture.get();
mip::LabelingOptions labelingOptions(mip::AssignmentMethod::PRIVILEGED);
labelingOptions.SetDowngradeJustification(true, "Label unnecessary.");
fileHandler->DeleteLabel(labelingOptions);
auto commitPromise = std::make_shared<std::promise<bool>>();
auto commitFuture = commitPromise->get_future();
fileHandler->CommitAsync(outputFile, commitPromise);
Remover proteção
Valide se o usuário tem direitos para remover a proteção do arquivo que está sendo acessado. Execute uma verificação de acesso antes de remover a proteção.
A RemoveProtection() função se comporta de forma semelhante a SetLabel() ou DeleteLabel(). Chame o método no objeto existente FileHandler e confirme a alteração.
Importante
Como desenvolvedor de aplicativos, é sua responsabilidade executar essa verificação de acesso. A falha ao executar corretamente a verificação de acesso pode resultar em vazamento de dados.
Exemplo de C++:
// Validate that the file referred to by the FileHandler is protected.
if (fileHandler->GetProtection() != nullptr)
{
// Validate that user is allowed to remove protection.
if (fileHandler->GetProtection()->AccessCheck(mip::rights::Export()) || fileHandler->GetProtection()->AccessCheck(mip::rights::Owner()))
{
auto commitPromise = std::make_shared<std::promise<bool>>();
auto commitFuture = commitPromise->get_future();
// Remove protection and commit changes to file.
fileHandler->RemoveProtection();
fileHandler->CommitAsync(outputFile, commitPromise);
result = commitFuture.get();
}
else
{
// Throw an exception if the user doesn't have rights to remove protection.
throw std::runtime_error("User doesn't have EXPORT or OWNER right.");
}
}
Exemplo de .NET:
if(handler.Protection != null)
{
// Validate that user has rights to remove protection from the file.
if(handler.Protection.AccessCheck(Rights.Export) || handler.Protection.AccessCheck(Rights.Owner))
{
// If user has Extract right, remove protection and commit the change. Otherwise, throw exception.
handler.RemoveProtection();
bool result = handler.CommitAsync(outputPath).GetAwaiter().GetResult();
return result;
}
else
{
throw new Microsoft.InformationProtection.Exceptions.AccessDeniedException("User lacks EXPORT right.");
}
}
Próximas Etapas
- Conheça o exemplo em C++ do MIP File SDK no GitHub.