如何在 _LoginPartial 的代码部分中获取用户角色?
Posted
技术标签:
【中文标题】如何在 _LoginPartial 的代码部分中获取用户角色?【英文标题】:How do I get User's Role within code portion of _LoginPartial? 【发布时间】:2017-02-25 16:10:33 【问题描述】:我正在使用 MVC 实体框架,我需要在 _LoginPartial 中获取用户的角色,以便在导航栏中获得一些特定于角色的功能。到达那里的最佳方法是什么?
我尝试过使用Dim myRoles = Roles.GetRolesForUser()
,但没有任何结果。这是错误的,因为我在其他地方使用了特定于角色的功能,而且效果很好。
在 Marco 评论中的链接之后,它提到了使用 ClaimsIdentity,但对我来说,它说 ClaimsIdentity 未声明(Rick 在去年 8 月在那里发表评论,解释说它对他不起作用,就像过去 2 年发生的变化一样)。
我也试过这个,这类似于我在其他地方工作的控制器中的代码:
Dim context As IOwinContext = New OwinContext
Dim manager = New AppUserManager(New UserStore(Of AppUser(context.Get(Of MyAppIdentityDbContext)()))
Dim userInfo = manager.FindById(curUserID)
Dim userRole As String = userInfo.Roles(0).RoleId
myRole = db.Roles.Where(Function(x) x.Id = userRole).FirstOrDefault().Name
但在运行时,我在“Dim manager”行中收到错误提示
“System.ArgumentNullException”类型的异常发生在 Microsoft.AspNet.Identity.EntityFramework.dll 但未在其中处理 用户代码附加信息:值不能为空。
我不知道它在说什么价值。
【问题讨论】:
asp.net identity get all roles of logged in user的可能重复 @Marco - 已编辑以根据您的评论添加更多详细信息 试试我评论文章中所说的。应该管用。如果需要,请使用 C#/vb 转换器。 @Marco,您是指他们问题中的提问者链接的教程吗?那篇文章指定使用“String[] roles = Roles.GetRolesForUser();”,我在上面编辑的问题中将其翻译为 VB。它什么都不返回。 不,我的意思是我第一条评论中问题的答案。 【参考方案1】:感谢 Marco 的帮助和他链接的另一个问题,我使用以下代码得到了它:
@Imports Microsoft.AspNet.Identity
@Imports System.Security.Claims
@Code
Dim db = New MyAppIdentityDbContext
Dim curUserID = User.Identity.GetUserId()
Dim myFirstName As String = (From users In db.Users Where users.Id = curUserID Select users.FirstName).FirstOrDefault
Dim myRole As String = ""
If curUserID IsNot Nothing AndAlso curUserID <> "" Then
Dim userID = CType(User.Identity, ClaimsIdentity)
Dim claims = userID.Claims
Dim roleType = userID.RoleClaimType
Dim myRoles = claims.Where(Function(c) c.Type = roleType).ToList()
myRole = (myRoles.FirstOrDefault.ToString)
'Here myRole contains whole https string - need to strip it to actual value
Dim lastInd = myRole.LastIndexOf(" ")
myRole = myRole.Substring(lastInd + 1, myRole.Length - (lastInd + 1))
End If
End Code
【讨论】:
以上是关于如何在 _LoginPartial 的代码部分中获取用户角色?的主要内容,如果未能解决你的问题,请参考以下文章
User.Identity.Name 返回的是 UserName 而不是 Name