Microsoft Information Protection SDK - Konsep mesin Policy SDK

mip::PolicyEngine mengimplementasikan semua operasi yang dapat dilakukan oleh Policy SDK, kecuali memuat profil.

Implementasi: Tambahkan mesin kebijakan

Implementasi: Membuat pengaturan mesin kebijakan

Mirip dengan profil, mesin juga memerlukan objek pengaturan, mip::PolicyEngine::Settings. Objek ini menyimpan pengenal unik mesin, objek dari implementasi mip::AuthDelegate Anda, data klien yang dapat disesuaikan untuk penelusuran kesalahan atau telemetri, serta, secara opsional, setelan lokal.

Contoh berikut membuat objek yang PolicyEngine::Settings disebut engineSettings dengan menggunakan identitas pengguna aplikasi:

PolicyEngine::Settings engineSettings(
  mip::Identity(mUsername), // mip::Identity.  
  authDelegateImpl,         // Auth delegate object
  "",                       // Client data. Customizable by developer, stored with engine.
  "en-US",                  // Locale.
  false);                   // Load sensitive information types for driving classification.

Saat membuat engineSettings dengan cara ini, juga secara eksplisit mengatur engineId unik:

engineSettings.SetEngineId(engineId);

Menggunakan nama pengguna atau email membantu memastikan bahwa mesin yang sama dimuat setiap kali pengguna menggunakan layanan atau aplikasi.

Juga valid untuk memberikan ID mesin kustom:

PolicyEngine::Settings engineSettings(
  "myEngineId",     // String
  authDelegateImpl, // Auth delegate object
  "",               // Client data in string format. Customizable by developer, stored with engine.
  "en-US",          // Locale. Default is en-US
  false);           // Load sensitive information types for driving classification. Default is false.

Sebagai praktik terbaik, gunakan parameter pertama, id, yang menghubungkan mesin ke pengguna terkait, sebaiknya nama utama pengguna.

Implementasi: Tambahkan mesin kebijakan

Untuk menambahkan mesin, kembali ke pola future/promise yang digunakan untuk memuat profil. Alih-alih membuat janji untuk mip::Profile, gunakan mip::PolicyEngine.


  // Auto profile will be std::shared_ptr<mip::Profile>.
  auto profile = profileFuture.get();

  // Create the delegate
  auto authDelegateImpl = std::make_shared<sample::auth::AuthDelegateImpl>(appInfo, userName, password);


  // Create the PolicyEngine::Settings object.
  PolicyEngine::Settings engineSettings("UniqueID", authDelegateImpl, "");

  // Create a promise for std::shared_ptr<mip::PolicyEngine>.
  auto enginePromise = std::make_shared<std::promise<std::shared_ptr<mip::PolicyEngine>>>();

  // Instantiate the future from the promise.
  auto engineFuture = enginePromise->get_future();

  // Add the engine using AddEngineAsync, passing in the engine settings and the promise.
  profile->AddEngineAsync(engineSettings, enginePromise);

  // Get the future value and store in std::shared_ptr<mip::PolicyEngine>.
  auto engine = engineFuture.get();

Kode menambahkan mesin untuk pengguna yang diautentikasi ke profil.

Penerapan: Mencantumkan label sensitivitas

Dengan menggunakan mesin yang ditambahkan, Anda dapat mencantumkan semua label sensitivitas yang tersedia untuk pengguna yang diautentikasi dengan memanggil engine->ListSensitivityLabels().

ListSensitivityLabels() mengambil daftar label dan atribut label tersebut untuk pengguna tertentu dari layanan. Hasilnya disimpan dalam vektor std::shared_ptr<mip::Label>.

Implementasi: ListSensitivityLabels()

std::vector<shared_ptr<mip::Label>> labels = engine->ListSensitivityLabels();

Implementasi: Cetak label

//Iterate through all labels in the vector
for (const auto& label : labels) {
  //print the label name
  cout << label->GetName() << endl;
  //Iterate through all child labels
  for (const auto& child : label->GetChildren()) {
    //Print the label with some formatting
    cout << "->  " << child->GetName() << endl;
  }
}

Mencetak nama menunjukkan bahwa aplikasi berhasil menarik kebijakan dari layanan dan mendapatkan label. Untuk menerapkan label, Anda memerlukan pengidentifikasi label. Ubah cuplikan sebelumnya untuk mengembalikan ID label:

for (const auto& label : labels) {
  //Print label name and GUID
  cout << label->GetName() << " : " << label->GetId() << endl;

  //Print child label name and GUID
  for (const auto& child : label->GetChildren()) {
    cout << "->  " << child->GetName() <<  " : " << child->GetId() << endl;
  }
}

Anda dapat menggunakan koleksi mip::Label yang dikembalikan oleh ListSensitivityLabels() untuk menampilkan semua label yang tersedia untuk pengguna lalu, ketika dipilih, gunakan ID untuk menerapkan label ke file.

Langkah berikutnya