MAPI 對象和屬性的許可權
適用於:Outlook 2013 |Outlook 2016
訪問許可權或一組允許的作業,可以是MAPI物件的特性,以及這些物件所支援之個別屬性的特性。 物件存取是由物件的父代決定。 對於訊息,其資料夾會決定訪問許可權。 對於訊息使用者或通訊組清單,其通訊簿容器會進行這項判斷。 當訊息之類的對象位於兩個資料夾中時,物件兩個複本的許可權可能會不同。
使用這些物件的用戶端可以在 IMAPISession::OpenEntry 呼叫上設定 MAPI_BEST_ACCESS 旗標,以要求對象允許的最高層級存取權。 視實作 對象的服務提供者而定,用戶端可能會或可能不會被授與所需的存取層級。 用戶端可以藉由呼叫物件 GetProps 方法來擷取 PR_ACCESS (PidTagAccess) 屬性,來判斷其授與的存取層級。 不過,因為服務提供者必須動態產生這個屬性的值,所以建議用戶端只在必要時擷取它。
若要判斷資料夾、通訊簿容器或通訊組清單等容器是否允許修改,請呼叫其 GetProps 方法來擷取 PR_ACCESS_LEVEL (PidTagAccessLevel) 屬性。 容器層級存取會影響客戶端顯示其使用者介面的方式。 它也會影響容器內對象的實作者,就其使用者介面顯示及其一般實作而言。
特定屬性的存取權取決於 MAPI 為擁有屬性的物件所設定的屬性架構。 屬性架構會指定物件的必要和選擇性屬性集,以及其訪問許可權。 不同於物件的父代所決定的物件存取,屬性存取是全域的。 不論物件父系的存取需求為何,每個物件都具有與架構所決定之屬性相同的許可權。
當屬性為只讀時,一律可透過 GetProps 或 OpenProperty 呼叫來使用。 不過,根據支援 屬性之對象的實作, SetProps 方法有兩個可能的結果可修改屬性,而 DeleteProps 方法則可加以移除:
失敗並傳回MAPI_E_NO_ACCESS
成功但未採取任何動作
您也可以使用繼承自 IMAPIProp 介面的 IPropData 介面來擷取或設定屬性和物件存取。 MAPI 提供以記憶體中數據為基礎的 IPropData 實作。 服務提供者可以在某些情況下使用 IPropData 來實作 IMAPIProp ,例如針對其狀態物件,或使用沒有內建交易的資料庫。 IPropData 只能在記憶體中運作,因此不需要鎖定和解除鎖定數據。