2008-11-21 75 views

回答

6

通常,用戶和用戶交互的安全上下文是不同的事情,因此如果以通用方式建模,這些應該與IPrincipal和IIdentity接口一樣分離。 (你可以想象應用程序中同一個用戶可以有不同的角色來與系統進行交互)。

有兩個概念相同的應用程序,在這種情況下,我認爲你可以安全地使用一個類實現兩個接口。如果您不直接通過IPrincial和IIdentity接口將實現類直接暴露給應用程序邏輯,那麼尤其如此。如果你保持這種分離,你可以隨時重構你的類,而不會破壞應用程序邏輯。

你應該記住另一個方面:通常設置爲用戶的安全上下文,而不是建立一個身份(你需要獲取權限等)更昂貴。但是,在某些情況下,應用程序只是指用戶,但不需要具有正確配置的安全上下文。在這些情況下,初始化用作身份和主體的用戶類實例可能是性能問題。 (當然,你也可以通過其他技術來解決這個問題,不僅僅是分開課程)。

最後,你還應該考慮,無論你是想用你自己的用戶類來實現IIdentity/IPrincipal,還是隻想填充GenericPrincipal/GenericIdentity實例。這裏最重要的事實是,IPrincipal(和IIdentity)實例必須是可序列化的,因爲它們可能會轉到其他AppDomains。設置一個可在AppDomain中輕鬆序列化和反序列化的IPrincipal實現並非易事,需要特別小心。所以除非你需要特殊的角色檢查,否則我會推薦使用GenericPrincipal/GenericIdentity。 (詳見這裏:http://sontek.vox.com/library/post/re-iprincipal-iidentity-ihttpmodule-serializable.html