4

我想根據基於聲明的網站中的自定義聲明授予文檔級別權限。用戶可能有數百個文檔或一個文檔。應用自定義聲明是一個好主意嗎?有什麼優點或缺點?可以添加到索賠集的索賠數量是否有限制?在基於聲明的應用程序中應用自定義聲明

在此先感謝您的幫助。

回答

5

即使有可能,保留索賠「粗粒度」通常是一個好主意。默認情況下,在Web應用程序中,聲明集將在每個請求中來回發送(因爲它是通過Cookie進行序列化的),因此您將有可能在整個網絡中傳輸相當大的有效負載。

您可以通過配置WIF使用「會議」,而不是餅乾覆蓋這個,但是......你的服務器端會話的所有缺點(如WebFarms配置,親和力等)

其他與這種方法相一致的東西是STS知識的維護。您需要保留一套相當大的規則來發布這些可能經常變化的索賠。

你肯定不希望在一箇中心基礎設施STS所有這些,因爲它會成爲潛在的大集的應用程序的瓶頸。所以你最終會把所有這些邏輯放到一個RP-STS(和你的應用程序關聯的STS)中。不是不可能的,但可能不方便。

通常情況下,「許可」的最大優勢要求是,授權經理tricial寫:

if(PrincipalContainsDocumentClaim(documentYouAreTryingToOpen) 
    ShowDocument(documentYouAreTryingToOpen); 
else 
    AccessDenied(documentYouAreTryingToOpen); 

我認爲更好的辦法是有一個授權管理器即能回答的問題:

bool HasAccess(IPrincipal p, string document) 

在該組件內部,您將使用聲明集來決定用戶是否有權訪問。該邏輯可能包括將角色,用戶名和其他「高階」聲明(例如您所屬的組織,您所在的國家/地區等)映射到權限中。

「權限索賠」的另一個問題是,如果你做出改變(例如您授予訪問權限的用戶登錄),你怎麼刷新claimset?你必須註銷登錄,這通常不是很好的用戶體驗。

+0

感謝Eugenio的詳細解釋,這是正確的表現將是主要問題,最好是使用自定義聲明的高級屬性。我嘗試使用自定義聲明分配權限的方式是使用SPRoleDefinition和SPRoleAssignment。我在哪裏可以獲得更多有關使用授權管理器PrincipalContainsDocumentClaim的示例?再次感謝 – aYus 2010-09-13 14:47:06

+0

謝謝Engenio。非常有用的信息 – aYus 2011-03-09 14:51:42