Microsoft 信息保护 SDK - 同意

mip::Consent 枚举类实现了一种方便易用的方法,让应用程序开发人员能够根据 SDK 访问的端点来提供自定义的同意体验。 通知可以告知用户要收集的数据、如何要求删除数据,或者法律或合规政策要求的任何其他信息。 用户授予同意后,应用程序才可以继续操作。 仅当尝试访问 Active Directory Rights Management Services (AD RMS) 时,才会调用此委派。 访问云服务时不会调用此委派。 如果应用程序不支持 AD RMS,则可以实现始终返回 Consent.AcceptAlways 的委派。

实现

同意是通过扩展 mip::Consent 基类并实现 GetUserConsent 以返回 mip::Consent 枚举值中的一个来实现的。

派生自 mip::Consent 的对象将传入 mip::FileProfile::Settingsmip::ProtectionProfile::Settings 构造函数。

当用户执行需要给予同意的操作时,SDK 将调用 GetUserConsent 方法,并将目标 URL 作为参数传入。 这是向用户展示必要的信息,以便用户决定是否同意使用服务时要实现的方法。

  • 始终接受:同意并记住该决定。
  • 接受:同意一次。
  • 拒绝:不同意。

当 SDK 使用此方法请求用户同意时,客户端应用程序应向用户呈现该 URL。 客户端应用程序应该提供一些获取用户同意的方法,并返回与用户决定相对应的相应同意枚举。

示例实现

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

};

当 SDK 需要同意时,SDK 将调用 GetUserConsent 方法,并将 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;
}

但是,在生产代码中,可能会要求用户选择是否同意,具体取决于区域或业务要求和法规。