Microsoft Information Protection SDK - Konsep handler file
Dalam SDK File MIP, mip::FileHandler
mengekspos semua berbagai operasi yang dapat digunakan untuk membaca dan menulis label, atau perlindungan, di seluruh set jenis file yang dukungannya bawaan.
Jenis file yang didukung
- Format File Office berdasarkan OPC (Office 2010 dan yang lebih baru)
- Format File Office Warisan (Office 2007)
- Dukungan PFILE generik
- File yang mendukung Adobe XMP
Fungsi handler file
mip::FileHandler
mengekspos metode untuk membaca, menulis, dan menghapus label dan informasi perlindungan. Untuk daftar lengkapnya, lihat referensi API.
Dalam artikel ini, metode berikut akan dibahas:
GetLabelAsync()
SetLabel()
DeleteLabel()
RemoveProtection()
CommitAsync()
Persyaratan
FileHandler
Membuat untuk bekerja dengan file tertentu memerlukan:
FileProfile
- Ditambahkan
FileEngine
keFileProfile
- Kelas yang mewarisi
mip::FileHandler::Observer
Membuat handler file
Langkah pertama yang diperlukan dalam mengelola file apa pun di File SDK adalah membuat FileHandler
objek. Kelas ini mengimplementasikan semua fungsionalitas yang diperlukan untuk mendapatkan, mengatur, memperbarui, menghapus, dan menerapkan perubahan label pada file.
FileHandler
Membuat semahal memanggil FileEngine
fungsi menggunakan CreateFileHandlerAsync
pola promise/future.
CreateFileHandlerAsync
menerima tiga parameter: Jalur ke file yang harus dibaca atau dimodifikasi, mip::FileHandler::Observer
untuk pemberitahuan peristiwa asinkron, dan janji untuk FileHandler
.
Catatan: Kelas mip::FileHandler::Observer
harus diimplementasikan di kelas turunan Observer
karena CreateFileHandler
memerlukan objek .
auto createFileHandlerPromise = std::make_shared<std::promise<std::shared_ptr<mip::FileHandler>>>();
auto createFileHandlerFuture = createFileHandlerPromise->get_future();
fileEngine->CreateFileHandlerAsync(filePath, std::make_shared<FileHandlerObserver>(), createFileHandlerPromise);
auto fileHandler = createFileHandlerFuture.get();
Setelah berhasil membuat FileHandler
objek, operasi file (get/set/delete/commit) dapat dilakukan.
Membaca label
Persyaratan metadata
Ada beberapa persyaratan untuk berhasil membaca metadata dari file dan menerjemahkan ke sesuatu yang dapat digunakan dalam aplikasi.
- Label yang sedang dibaca masih harus ada di layanan Microsoft 365. Jika telah dihapus sepenuhnya, SDK akan gagal mendapatkan informasi tentang label tersebut dan akan mengembalikan kesalahan.
- Metadata file harus utuh. Metadata ini mencakup:
- Atribut1
- Atribut2
GetLabelAsync()
Setelah membuat handler untuk menunjuk ke file tertentu, kami kembali ke pola promise/future untuk membaca label secara asinkron. Janji adalah untuk mip::ContentLabel
objek yang berisi semua informasi tentang label yang diterapkan.
Setelah membuat promise
instans objek dan future
, kita membaca label dengan memanggil fileHandler->GetLabelAsync()
dan menyediakan promise
sebagai parameter lone. Akhirnya, label dapat disimpan dalam mip::ContentLabel
objek yang akan kita dapatkan dari future
.
auto loadPromise = std::make_shared<std::promise<std::shared_ptr<mip::ContentLabel>>>();
auto loadFuture = loadPromise->get_future();
fileHandler->GetLabelAsync(loadPromise);
auto label = loadFuture.get();
Data label dapat dibaca dari label
objek dan diteruskan ke komponen atau fungsionalitas lain dalam aplikasi.
Mengatur label
Mengatur label adalah proses dua bagian. Pertama, setelah membuat handler yang menunjuk ke file yang dimaksud, label dapat diatur dengan memanggil FileHandler->SetLabel()
dengan beberapa parameter: mip::Label
, , mip::LabelingOptions
dan mip::ProtectionOptions
. Pertama, kita harus menyelesaikan ID label ke label lalu menentukan opsi pelabelan.
Mengatasi ID label untuk mip::Label
Parameter pertama fungsi SetLabel adalah mip::Label
. Seringkali, aplikasi bekerja dengan pengidentifikasi label daripada label. Pengidentifikasi label dapat diselesaikan dengan mip::Label
memanggil GetLabelById pada file atau mesin kebijakan:
mip::Label label = mEngine->GetLabelById(labelId);
Opsi pelabelan
Parameter kedua yang diperlukan untuk mengatur label adalah mip::LabelingOptions
.
LabelingOptions
menentukan informasi tambahan tentang label seperti dan pembenaran AssignmentMethod
untuk tindakan.
mip::AssignmentMethod
adalah enumerator yang memiliki tiga nilai:STANDARD
, ,PRIVILEGED
atauAUTO
.mip::AssignmentMethod
Tinjau referensi untuk detail selengkapnya.- Pembenaran diperlukan hanya jika kebijakan layanan memerlukannya dan saat menurunkan sensitivitas file yang ada .
Cuplikan ini menunjukkan pembuatan mip::LabelingOptions
objek dan mengatur pembenaran dan pesan penurunan tingkat.
auto labelingOptions = mip::LabelingOptions(mip::AssignmentMethod::STANDARD);
labelingOptions.SetDowngradeJustification(true, "Because I made an educated decision based upon the contents of this file.");
Pengaturan perlindungan
Beberapa aplikasi mungkin perlu melakukan operasi atas nama identitas pengguna yang didelegasikan. Kelas mip::ProtectionSettings
memungkinkan aplikasi untuk menentukan identitas yang didelegasikan per handler. Sebelumnya, delegasi dilakukan oleh kelas mesin. Ini memiliki kerugian yang signifikan dalam overhead aplikasi dan layanan pulang pergi. Dengan memindahkan pengaturan pengguna yang didelegasikan ke mip::ProtectionSettings
dan menjadikannya bagian dari kelas handler, kami menghilangkan overhead ini, menghasilkan performa yang lebih baik untuk aplikasi yang melakukan banyak operasi atas nama berbagai set identitas pengguna.
Jika delegasi tidak diperlukan, teruskan mip::ProtectionSettings()
ke fungsi SetLabel . Jika delegasi diperlukan, delegasi dapat dicapai dengan membuat mip::ProtectionSettings
objek dan mengatur alamat email yang didelegasikan:
mip::ProtectionSettings protectionSettings;
protectionSettings.SetDelegatedUserEmail("alice@contoso.com");
Mengatur label
Setelah mengambil mip::Label
menggunakan ID, atur opsi pelabelan, dan, secara opsional, atur pengaturan perlindungan, label sekarang dapat diatur pada handler.
Jika Anda tidak mengatur pengaturan perlindungan, atur label dengan memanggil SetLabel
pada handler:
fileHandler->SetLabel(label, labelingOptions, mip::ProtectionSettings());
Jika Anda memerlukan pengaturan perlindungan untuk melakukan operasi yang didelegasikan, maka:
fileHandler->SetLabel(label, labelingOptions, protectionSettings);
Setelah sekarang mengatur label pada file yang dirujuk oleh handler, masih ada satu langkah lagi untuk melakukan perubahan dan menulis file ke disk atau membuat aliran output.
Menerapkan perubahan
Langkah terakhir dalam melakukan perubahan apa pun pada file di MIP SDK adalah menerapkan perubahan. Ini dicapai dengan menggunakan FileHandler->CommitAsync()
fungsi .
Untuk menerapkan fungsi komitmen, kami kembali ke janji/masa depan, menciptakan janji untuk .bool
Fungsi CommitAsync()
akan mengembalikan true jika operasi berhasil atau salah jika gagal karena alasan apa pun.
Setelah membuat promise
dan future
, CommitAsync()
dipanggil dan dua parameter disediakan: Jalur file output (std::string
), dan janji. Terakhir, hasilnya diperoleh dengan mendapatkan nilai future
objek.
auto commitPromise = std::make_shared<std::promise<bool>>();
auto commitFuture = commitPromise->get_future();
fileHandler->CommitAsync(outputFile, commitPromise);
auto wasCommitted = commitFuture.get();
Penting:FileHandler
Tidak akan memperbarui atau menimpa file yang ada. Terserah pengembang untuk menerapkan mengganti file yang sedang diberi label.
Jika menulis label ke FileA.docx, salinan file, FileB.docx, akan dibuat dengan label yang diterapkan. Kode harus ditulis untuk menghapus/mengganti nama FileA.docx dan mengganti nama FileB.docx.
Menghapus label
auto fileHandler = mEngine->CreateFileHandler(filePath, std::make_shared<FileHandlerObserverImpl>());
fileHandler->DeleteLabel(mip::AssignmentMethod::PRIVILEGED, "Label unnecessary.");
auto commitPromise = std::make_shared<std::promise<bool>>();
auto commitFuture = commitPromise->get_future();
fileHandler->CommitAsync(outputFile, commitPromise);
Hapus proteksi
Aplikasi MIP File SDK Anda harus memvalidasi bahwa pengguna memiliki hak untuk menghapus perlindungan dari file yang diakses. Ini dapat dicapai dengan melakukan pemeriksaan akses sebelum menghapus perlindungan.
Fungsi ini RemoveProtection()
berulah dengan cara yang mirip SetLabel()
dengan atau DeleteLabel()
. Metode ini dipanggil pada objek yang ada FileHandler
, maka perubahan harus dilakukan.
Penting
Sebagai pengembang aplikasi, anda bertanggung jawab untuk melakukan pemeriksaan akses ini. Kegagalan untuk melakukan pemeriksaan akses dengan benar dapat digunakan kembali dalam kebocoran data.
Contoh 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.");
}
}
Contoh .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.");
}
}