我在8个月前发布了this question。接受的答案涉及一些你不会通过默认提供商的规则播放而错过的东西。例如,如果您不使用从RoleProvider继承的自定义RoleProvider,则会失去使用User.IsInRole()
等快速快捷方式的功能。答案是指像“内置管道”这样的东西。
我希望知道的是,我可以在哪里找到依赖于“内置管道”的完整列表,以及显示他们在幕后调用哪些覆盖方法的内容。
例如,HttpContext.Current.User.IsInRole()
是(我假设)在我的自定义RoleProvider中引用并调用我的覆盖“IsUserInRole()”方法,但我希望看到明确声明{{1实际上是为所有提供者的所有这些方法调用HttpContext.Current.User.IsInRole()
。
我明白它应该是显而易见的(IsInRole()和IsUserInRole()是如此相似),但我要求的动机是看到并了解我可用的其他类型的快捷方式甚至没有意识到。我有一种感觉,我已经多次重新发明了轮子,我甚至不知道它。
答案 0 :(得分:0)
它们实际上并不相同,但您使用的任何角色提供程序都可能填充当前用户的角色集合以包含提供程序的所有角色。
HttpContext.Current.User
是IPrincipal
,您可在此处阅读:http://msdn.microsoft.com/en-us/library/system.security.principal.aspx
这是任何.NET应用程序中Identity的.NET约定(当然包括ASP.NET)。您可以确定您正在使用的IPrincipal的实现的唯一方法是调用与您的RoleProvider相同的功能是使用实际附带的提供程序。
角色提供程序根据httpApplication对象(http://msdn.microsoft.com/en-us/library/8fw7xh74.aspx)进行实例化,并可供Principal实现使用。
请查看此MSDN文章的“备注”部分:http://msdn.microsoft.com/en-us/library/bb340078.aspx由Principal IsUserInRole
调用角色提供程序的IsInRole
完全取决于您的Principal提供程序的实现