Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W zestawie MIP File SDK mip::FileHandler udostępnia operacje służące do odczytywania i zapisywania etykiet lub ustawień ochrony w różnych typach plików objętych wbudowaną obsługą.
Typy obsługiwanych plików
- Formaty plików pakietu Office oparte na protokole OPC (pakiet Office 2010 lub nowszy)
- Starsze formaty plików pakietu Office (Office 2007)
- Ogólna obsługa pliku PFILE
- Pliki obsługujące program Adobe XMP
Funkcje obsługi plików
mip::FileHandler uwidacznia metody odczytywania, zapisywania i usuwania zarówno etykiet, jak i informacji o ochronie. Aby uzyskać pełną listę, zapoznaj się z dokumentacją API.
W tym artykule omówiono następujące metody:
GetLabel()SetLabel()DeleteLabel()RemoveProtection()CommitAsync()
Wymagania
Aby utworzyć element FileHandler do pracy z określonym plikiem, podaj:
- Polecenie
FileProfile - Element
FileEnginedodany do elementuFileProfile - Klasa, która dziedziczy
mip::FileHandler::Observer
Utwórz procedurę obsługi plików
Pierwszym krokiem w zarządzaniu plikami w zestawie SDK File jest utworzenie obiektu FileHandler. Ta klasa zawiera funkcje wymagane do pobierania, ustawiania, aktualizowania, usuwania i zatwierdzania zmian etykiet w plikach.
Utwórz FileHandler, wywołując funkcję CreateFileHandlerAsync obiektu FileEngine przy użyciu wzorca promise/future.
CreateFileHandlerAsync przyjmuje następujące parametry: ścieżkę do pliku do odczytu lub modyfikacji, ścieżkę używaną do raportowania inspekcji, flagę włączającą wykrywanie inspekcji, mip::FileHandler::Observer do asynchronicznych powiadomień o zdarzeniach oraz obietnicę dla FileHandler.
Note
Zaimplementuj klasę mip::FileHandler::Observer w klasie pochodnej, ponieważ CreateFileHandler wymaga Observer obiektu.
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();
Po utworzeniu FileHandler obiektu można wykonywać operacje na plikach (get/set/delete/commit).
Odczytywanie etykiety
Wymagania dotyczące metadanych
Pomyślne odczytywanie metadanych z pliku i przekształcanie ich do postaci, z której aplikacje mogą korzystać, ma kilka wymagań.
- Odczytywana etykieta musi nadal istnieć w usłudze Microsoft 365. Jeśli ktoś usunął etykietę, zestaw SDK nie może uzyskać informacji o tej etykiecie i zwróci błąd.
- Metadane pliku muszą być nienaruszone. Te metadane obejmują:
- Atrybut1
- Atrybut2
GetLabel()
Po utworzeniu procedury obsługi wskazującej określony plik należy odczytać etykietę synchronicznie, wywołując metodę fileHandler->GetLabel(). Metoda zwraca mip::ContentLabel obiekt zawierający wszystkie informacje o zastosowanej etykiecie.
auto label = fileHandler->GetLabel();
Możesz odczytać dane etykiety z label obiektu i przekazać je do dowolnego innego składnika lub funkcji w aplikacji.
Ustawianie etykiety
Ustawianie etykiety jest procesem dwuczęściowym. Po utworzeniu procedury obsługi wskazującej na dany plik ustaw etykietę, wywołując FileHandler->SetLabel() z kilkoma parametrami: mip::Label, mip::LabelingOptions i mip::ProtectionOptions. Najpierw przypisz identyfikator etykiety do etykiety, a następnie zdefiniuj opcje etykietowania.
Rozwiąż identyfikator etykiety na mip::Label
Pierwszy parametr funkcji SetLabel to mip::Label. Często aplikacja współpracuje z identyfikatorami etykiet, a nie etykietami. Ustal identyfikator etykiety na mip::Label, wywołując metodę GetLabelById w aparacie plików lub aparacie zasad:
std::shared_ptr<mip::Label> label = engine->GetLabelById(labelId);
Opcje etykietowania
Drugi parametr wymagany do ustawienia etykiety to mip::LabelingOptions.
LabelingOptions określa więcej informacji o etykiecie, takich jak AssignmentMethod i uzasadnienie akcji.
-
mip::AssignmentMethodto moduł wyliczający, który ma trzy wartości:STANDARD, lubPRIVILEGEDAUTO. Zapoznaj się zmip::AssignmentMethododniesieniem, aby uzyskać więcej informacji. - Podaj uzasadnienie tylko wtedy, gdy zasady usługi tego wymagają i podczas obniżania istniejącej poufności pliku.
Ten fragment kodu pokazuje, jak utworzyć obiekt mip::LabelingOptions oraz ustawić uzasadnienie i komunikat dotyczące obniżenia wersji.
auto labelingOptions = mip::LabelingOptions(mip::AssignmentMethod::STANDARD);
labelingOptions.SetDowngradeJustification(true, "Because I made an educated decision based upon the contents of this file.");
Ustawienia zabezpieczeń
Niektóre aplikacje mogą wymagać wykonywania operacji w imieniu delegowanej tożsamości użytkownika. Klasa mip::ProtectionSettings umożliwia aplikacji zdefiniowanie tożsamości delegowanej dla każdej procedury obsługi. Wcześniej klasy silnika odpowiadały za delegowanie. Ten projekt miał znaczne wady w obciążeniach aplikacji i rundach usług. Przeniesienie delegowanych ustawień użytkownika do mip::ProtectionSettings klasy obsługi i uczynienie ich częścią klasy obsługi eliminuje to obciążenie, co zwiększa wydajność aplikacji wykonujących wiele operacji w imieniu różnych zestawów tożsamości użytkowników.
Jeśli nie potrzebujesz delegowania, przekaż mip::ProtectionSettings() do funkcji SetLabel . Jeśli potrzebujesz delegowania, utwórz obiekt mip::ProtectionSettings i ustaw adres e-mail delegata:
mip::ProtectionSettings protectionSettings;
protectionSettings.SetDelegatedUserEmail("alice@contoso.com");
Ustawianie etykiety
Po pobraniu elementu mip::Label za pomocą identyfikatora ustaw opcje etykietowania i opcjonalnie ustawienia ochrony, a następnie możesz ustawić etykietę w programie obsługi.
Jeśli nie ustawiono ustawień zabezpieczeń, ustaw etykietę, wywołując SetLabel na obsłudze:
fileHandler->SetLabel(label, labelingOptions, mip::ProtectionSettings());
Jeśli potrzebujesz ustawień ochrony do wykonania operacji delegowanej, użyj:
fileHandler->SetLabel(label, labelingOptions, protectionSettings);
Po ustawieniu etykiety w pliku, do którego odwołuje się program obsługi, zatwierdź zmianę i zapisz plik na dysku lub utwórz strumień wyjściowy.
Zatwierdź zmiany
Ostatnim krokiem zatwierdzania wszelkich zmian w pliku w zestawie MIP SDK jest zatwierdzenie zmiany. Użyj funkcji FileHandler->CommitAsync().
Aby zaimplementować funkcję zobowiązania, wróć do obietnicy/przyszłości, tworząc obietnicę dla elementu bool. Funkcja CommitAsync() zwraca wartość true, jeśli operacja zakończyła się powodzeniem lub fałszem, jeśli nie powiodła się z jakiegokolwiek powodu.
Po utworzeniu CommitAsync() i promise wywołaj future i przekaż dwa parametry: ścieżkę pliku wyjściowego (std::string) i obietnicę. Na koniec uzyskaj wynik, uzyskując wartość future obiektu.
auto commitPromise = std::make_shared<std::promise<bool>>();
auto commitFuture = commitPromise->get_future();
fileHandler->CommitAsync(outputFile, commitPromise);
auto wasCommitted = commitFuture.get();
Ważne
Element FileHandler nie zaktualizuje ani nie zastąpi istniejących plików. Musisz zaimplementować zamiennik dla pliku, który oznaczasz.
Jeśli zapiszesz etykietę do FileA.docx, CommitAsync() utworzy kopię pliku, FileB.docx, z zastosowaną etykietą. Napisz kod, aby usunąć lub zmienić nazwę FileA.docx i zmienić nazwę FileB.docx.
Usuwanie etykiety
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);
Usuwanie ochrony
Sprawdź, czy użytkownik ma prawa do usunięcia ochrony z pliku, do którego jest uzyskiwany dostęp. Przed usunięciem ochrony wykonaj kontrolę dostępu .
Funkcja RemoveProtection() działa podobnie jak SetLabel() lub DeleteLabel(). Wywołaj metodę w istniejącym FileHandler obiekcie, a następnie zatwierdź zmianę.
Ważne
Jako deweloper aplikacji ponosisz odpowiedzialność za wykonanie tej kontroli dostępu. Niepowodzenie prawidłowego sprawdzania dostępu może spowodować wyciek danych.
Przykład języka 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.");
}
}
Przykład platformy .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.");
}
}
Następne kroki
- Zapoznaj się z przykładem zestawu MIP File SDK C++ w GitHub.