5

我大约 8 个月前发布了这个问题。接受的答案涉及您因不遵守默认提供商的规则而错过的一些事情。例如,如果您不使用从 RoleProvider 继承的自定义 RoleProvider,您将无法使用快速快捷方式,例如User.IsInRole(). 答案将此类事物称为“内置管道”。

我想知道的是在哪里可以找到依赖于这个“内置管道”的东西的完整列表,以及显示他们在幕后调用哪些覆盖方法的东西。

例如,HttpContext.Current.User.IsInRole()是(我假设)在我的自定义 RoleProvider 中引用并调用我重写的“IsUserInRole()”方法,但我想查看文档,其中明确说明HttpContext.Current.User.IsInRole()实际调用IsUserInRole(),对于所有提供者的所有此类方法.

我知道这应该已经很明显了(IsInRole() 和 IsUserInRole() 非常相似),但我提出问题的动机是查看和了解我什至不知道的其他可用的此类快捷方式的。我有一种重新发明轮子的感觉,我什至不知道。

4

1 回答 1

0

它们并不完全相同,但是您使用的任何角色提供者都可能会填充当前用户的角色集合以包含提供者的所有角色。

HttpContext.Current.User是一个IPrincipal你可以在这里阅读:http: //msdn.microsoft.com/en-us/library/system.security.principal.aspx

这是任何 .NET 应用程序(当然包括 ASP.NET)中身份的 .NET 约定。您可以确定您正在使用的 IPrincipal 的实现是调用 RoleProvider 的相同函数的唯一方法是使用您的提供程序实际附带的一个函数。

角色提供者根据 httpApplication 对象 ( http://msdn.microsoft.com/en-us/library/8fw7xh74.aspx ) 进行实例化,并且可供 Principal 实现使用。

查看这篇 MSDN 文章的备注部分:http: //msdn.microsoft.com/en-us/library/bb340078.aspxIsUserInRole Principal对角色提供者的调用IsInRole完全取决于您的 Principal 的实现提供者。

于 2012-10-19T21:44:35.727 回答