пакет SDK для Microsoft Information Protection — согласие

Класс перечисления mip::Consent предоставляет простой в использовании способ, позволяющий разработчикам приложений задавать собственный сценарий получения согласия в зависимости от конечной точки API, к которой обращается SDK. Уведомление может сообщить пользователю о собранных данных, способах удаления данных или любых других сведений, необходимых политикам законодательства или соответствия требованиям. После предоставления пользователю согласия приложение сможет продолжить работу. Этот делегат вызывается только при попытке доступа к службам управления правами Active Directory (AD RMS). Он не вызывается при доступе к облачным службам. Если ваше приложение не будет поддерживать AD RMS, вы можете реализовать делегат, который всегда возвращает Consent.AcceptAlways.

Внедрение

Согласие реализуется путём расширения базового класса mip::Consent и реализации GetUserConsent, чтобы возвращать одно из значений перечисления mip::Consent.

Объект, производный от mip::Consent, передаётся в конструктор mip::FileProfile::Settings или mip::ProtectionProfile::Settings.

Когда пользователь выполняет операцию, требующую предоставления согласия, пакет SDK вызывает GetUserConsent метод, передав url-адрес назначения в качестве параметра. Именно в этом методе следует реализовать отображение необходимой информации для пользователя, чтобы он мог принять решение о том, даёт ли он согласие на использование сервиса.

  • AcceptAlways: Согласиться и запомнить решение.
  • Примите: согласие один раз.
  • Отклонить: не соглашайтесь.

Когда пакет SDK запрашивает согласие пользователя с этим методом, клиентское приложение должно представить URL-адрес пользователю. Клиентские приложения должны предоставлять тот или иной способ получения согласия пользователя и возвращать соответствующее значение перечисления Consent, которое соответствует решению пользователя.

Пример реализации

class ConsentDelegateImpl final : public mip::ConsentDelegate {
public:
  ConsentDelegateImpl() = default;
  
  virtual mip::Consent GetUserConsent(const std::string& url) override;

};

Если пакет SDK требует согласия, метод GetUserConsent вызывается пакетом SDK, а URL-адрес передаётся в качестве параметра. В приведенном ниже примере пользователь уведомляется о том, что пакет SDK подключится к указанному URL-адресу и предоставляет пользователю параметр в командной строке. В зависимости от выбора пользователя его согласие либо принимается, либо отклоняется, и эта информация передаётся в SDK. Если пользователь отказывается дать согласие, приложение сгенерирует исключение, и обращение к службе защиты не выполняется.

Consent ConsentDelegateImpl::GetUserConsent(const string& url) {
  //Print the consent URL, ask user to choose
  std::cout << "SDK will connect to: " << url << std::endl;

  std::cout << "1) Accept Always" << std::endl;
  std::cout << "2) Accept" << std::endl;
  std::cout << "3) Reject" << std::endl;
  std::cout << "Select an option: ";
  char input;
  std::cin >> input;

  switch (input)
  {
  case '1':
    return Consent::AcceptAlways;
    break;
  case '2':
    return Consent::Accept;
    break;
  case '3':
    return Consent::Reject;
    break;
  default:
    return Consent::Reject;
  }  
}

При тестировании или разработке или при использовании только облачных служб можно реализовать базовый ConsentDelegate элемент.

Consent ConsentDelegateImpl::GetUserConsent(const string& url) {
  return Consent::AcceptAlways;
}

Однако в рабочем коде пользователю может потребоваться предоставить выбор согласия в зависимости от региональных или бизнес-требований и нормативных требований.