@Roles.GetRolesForUser()
不返回角色。 @Roles.GetRolesForUser().Count()
为0。
@Roles.IsUserInRole('name_of_logged_in_role')
在相同位置的同一视图中返回true
。
Razor查看:
<p>
@User.Identity.Name //Output: MyName
@Roles.GetRolesForUser().Count() //Output: 0
@Roles.IsUserInRole("Radiologist") //Output: True
</p>
更新
@Roles.GetRolesForUser(User.Identity.Name).Length //Output: 0
@Roles.GetRolesForUser(User.Identity.GetUserName()).Length //Output: 0
答案 0 :(得分:6)
GetRolesForUser
方法一样。 {/ 1}}对象默认使用默认提供程序设置简单会员,但您似乎使用 ASP.NET身份而不是简单会员< / strong>即可。直到我想知道自己为什么不起作用时,我才发现差异。
你得到Roles
的原因是因为string[0]
对数据库中不存在的表执行了sql查询。
GetRolesForUser
工作的原因或多或少,它甚至没有使用默认提供程序来检查它使用IsUserInRole
CacheRolesInCookie
因此,从技术上讲,它转到了默认提供程序列出的connectionString并返回If CacheRolesInCookie is true, then roleName may be checked against the roles cache rather than the specified role provider.
,因为数据库中没有该connectionString的数据。将当前数据库添加到提供程序也无济于事,因为简单成员数据库架构与 ASP.NET身份
话虽这么说,你应该通过UserName获得这样的角色:
简单解决方案:
string[0]
<强>更新强>
扩展解决方案:
您可以在上下文中扩展 ASP.NET Identity 角色
http://www.codeproject.com/Articles/799571/ASP-NET-MVC-Extending-ASP-NET-Identity-Roles