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::Settings
或 mip::ProtectionProfile::Settings
构造函数。
当用户执行需要给予同意的操作时,SDK 将调用 GetUserConsent
方法,并将目标 URL 作为参数传入。 这是向用户展示必要的信息,以便用户决定是否同意使用服务时要实现的方法。
同意选项
- 始终接受:同意并记住该决定。
- 接受:同意一次。
- 拒绝:不同意。
当 SDK 使用此方法请求用户同意时,客户端应用程序应向用户呈现该 URL。 客户端应用程序应该提供一些获取用户同意的方法,并返回与用户决定相对应的相应同意枚举。
示例实现
consent_delegate_impl.h
class ConsentDelegateImpl final : public mip::ConsentDelegate {
public:
ConsentDelegateImpl() = default;
virtual mip::Consent GetUserConsent(const std::string& url) override;
};
consent_delegate_impl.cpp
当 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;
}
但是,在生产代码中,可能会要求用户选择是否同意,具体取决于区域或业务要求和法规。