因为IPriincipal具有IIdentity属性,所以在我的User类上同时实现这两个接口是否合适?
发布于 2008-11-21 14:52:00
通常,用户和用户交互的安全上下文是不同的东西,因此,如果以通用方式建模,则应该像IPrincipal和IIdentity接口那样将它们分开。(您可以想象,在应用程序中,同一用户可以有不同的角色来与系统交互。)
在某些应用程序中,这两个概念是相同的,在这种情况下,我认为您可以使用单个类安全地实现这两个接口。如果不直接通过IPrincial和IIdentity接口将实现类公开给应用程序逻辑,情况尤其如此。如果你保持这种分离,你可以在不破坏应用程序逻辑的情况下随时重构你的类。
您应该记住的另一个方面是:通常,为用户设置安全上下文比设置身份(您需要获取权限等)的成本更高。但是,在某些情况下,应用程序只是引用用户,但并不要求具有正确配置的安全上下文。在这些情况下,初始化同时充当标识和主体的user类实例可能是一个性能问题。(当然,您也可以使用其他技术来解决这个问题,而不仅仅是通过拆分类来解决。)
最后,您还应该考虑是否要用自己的user类实现IIdentity/IPrincipal元素,还是只填充GenericPrincipal/GenericIdentity实例。这里最重要的事实是,IPrincipal (和IIdentity)实例必须是可序列化的,因为它们可能会转到其他AppDomains。设置一个可以在AppDomains中轻松序列化和反序列化的IPrincipal实现并非易事,需要格外小心。因此,除非您需要特殊的角色检查,否则我建议使用GenericPrincipal/GenericIdentity。(更多信息请点击这里:http://sontek.vox.com/library/post/re-iprincipal-iidentity-ihttpmodule-serializable.html)
https://stackoverflow.com/questions/308278
复制相似问题