Roles.GetRolesForUser 仅调用默认角色提供程序?
我使用多个角色提供程序,标准 SQL 提供程序加上自定义提供程序。在 Global.asax - RoleManager_GetRoles 内部,我为应该使用我的自定义提供程序的用户创建一个 RolePrincipal,并将提供程序名称设置为我的自定义提供程序,并让其他用户正常处理。
这几乎可行,asp.net 允许访问通过 web.config 保护的页面,并调用我的提供程序来获取角色列表。但是,当我在代码中调用 Roles.GetRolesForUser()
时,它似乎只调用默认角色提供程序,而不是我的自定义提供程序。如果我将自定义提供程序设置为默认提供程序,则会调用它,但只有它被调用。
我已经通过枚举角色提供者并在提供者上使用与 RolePrincipal 匹配的名称调用 GetRolesForUser()
来解决这个问题,但在我看来 Roles.GetRolesForUser()< /code> 默认情况下应该这样做。
我错过了什么吗?
I'm using multiple role providers, the standard SQL provider plus a custom one. Inside Global.asax - RoleManager_GetRoles I create a RolePrincipal for users that should use my custom provider with the provider name set to my custom provider, and let other users be handled as normal.
This almost works, asp.net allows access to pages protected via the web.config and calls my provider to get the list of roles. However, when I call Roles.GetRolesForUser()
inside my code it only seems to invoke the default role provider, not my custom provider. If I set my custom provider to be the default, then it is invoked, but only it is ever invoked.
I've worked around it by instead enumerating the role providers and calling GetRolesForUser()
on the provider with a matching name to the RolePrincipal, but it seems to me that Roles.GetRolesForUser()
should be doing that by default.
Am I missing something?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
RoleManager 和 RolePrincipal 是用于不同目的的不同对象。
我认为您想要使用的是在
RolePrincipal
实例上调用GetRoles()
,而不是Roles.GetRolesForUser()
。不同之处在于,显式 RolePrincipal 定义了用户和提供者之间的关系,而 Roles 只是角色提供者的管理对象,在没有其他信息的情况下,将仅使用默认提供者。来自 RolePrincipal 文档:
希望有帮助。
The RoleManager and RolePrincipal are different objects for different purposes.
I think what you want to be using is a call to
GetRoles()
on yourRolePrincipal
instance, rather thanRoles.GetRolesForUser()
.The difference is that an explicit RolePrincipal is defining the relationship between a user and a provider, whereas Roles is just a management object for role providers, and given no other information, will just use the default provider. From the documentation for RolePrincipal:
Hope that helps.