MAPI 对象和属性的权限
适用于:Outlook 2013 | Outlook 2016
访问权限或允许操作集可以是 MAPI 对象和这些对象支持的各个属性的特征。 对象访问由对象的父级确定。 对于邮件,其文件夹确定访问权限。 对于消息用户或通讯组列表,其通讯簿容器会做出此决定。 当邮件等对象驻留在两个文件夹中时,该对象的两个副本的权限可能不同。
使用这些对象的客户端可以通过在 IMAPISession::OpenEntry 调用上设置 MAPI_BEST_ACCESS 标志来请求对象允许的最高访问级别。 根据实现 对象的服务提供程序,客户端可能获得或可能不会被授予所需的访问级别。 客户端可以通过调用对象 GetProps 方法来确定授予其访问权限的级别,以检索 pidTagAccess () 属性PR_ACCESS。 但是,由于服务提供程序必须动态生成此属性的值,因此建议客户端仅在必要时检索该值。
若要确定容器(如文件夹、通讯簿容器或通讯组列表)是否允许修改,请调用其 GetProps 方法以检索 pidTagAccessLevel) 属性 (PR_ACCESS_LEVEL。 容器级访问会影响客户端显示其用户界面的方式。 它还会影响容器中对象的实现者用户界面显示及其常规实现。
对特定属性的访问权限由 MAPI 为拥有该属性的对象设置的属性架构确定。 属性架构指定对象的必需属性和可选属性集及其访问权限。 与由对象的父级确定的对象访问不同,属性访问是全局访问。 无论对象的父对象的访问要求如何,每个对象都具有与架构所确定的属性相同的权限。
当属性为只读时,它将始终可用于 GetProps 或 OpenProperty 调用。 但是,根据支持 属性的 对象的实现, SetProps 方法修改属性和删除属性的 DeleteProps 方法有两种可能的结果:
失败并返回MAPI_E_NO_ACCESS
成功且未执行任何操作
还可以使用继承自 IMAPIProp 接口的 IPropData 接口检索或设置属性和对象访问。 MAPI 提供基于内存中数据的 IPropData 的实现。 在某些情况下(例如,对于其状态对象,或者如果使用的数据库没有内置事务),服务提供商可以使用 IPropData 实现 IMAPIProp 。 IPropData 仅在内存中工作,因此无需锁定和解锁数据。