aspnet 身份中用户的多个角色
Posted
技术标签:
【中文标题】aspnet 身份中用户的多个角色【英文标题】:multiple roles for a user in aspnet identity 【发布时间】:2017-11-03 00:56:21 【问题描述】:在我的项目中,我有一个有 2 个职位的用户,所以, 我在我的数据库的 AspNetUserRoles 表中添加了一个具有 2 个角色的用户,
例如,我的用户名为“email@something.com”有两个角色:“accountant”和“ExecutiveExpert”
但是当我调用 User.IsInRole("ExecutiveExpert")
函数时,它只检查第一个角色:accountant,而不是所有角色(accountant 和 ExecutiveExpert ) 并返回 false,
如何更改 asp.net 身份以检查所有用户角色?一般可以吗?
这些是我的桌子:
[AspNetUsers]:ID: c35721e2-05ef-4c32-8915-b4ad117c5a98
[AspNetRoles]:
Id Name
743f5c09-2b94-4da6-ab1c-9c9a6c9373b7 accountant
845efdf6-ab07-475c-9eb1-b14365b1a54c ExecutiveExpert
[AspNetUserRoles]:
userID RoleID
c35721e2-05ef-4c32-8915-b4ad117c5a98 743f5c09-2b94-4da6-ab1c-9c9a6c9373b7
c35721e2-05ef-4c32-8915-b4ad117c5a98 845efdf6-ab07-475c-9eb1-b14365b1a54c
【问题讨论】:
我不明白你在说什么。User.IsInRole
只会给你一个布尔值。如果它具有指定的角色,则为 true,否则为 false。
您需要将string
传递给IsInRole
。见the docs
@mason:我刚刚编辑了我的问题,请你再读一遍好吗?谢谢。
我还是不明白你在问什么。 IsInRole 一次只检查一个角色。如果你想检查两个,你会做类似bool hasBothRoles = User.IsInRole("Role1") && User.IsInRole ("Role2");
如果IsInrole
报告一个角色的错误,那么你就会遇到一个完全不同的问题。
@mason:我的问题是这个用户没有 ExecutiveExpert 角色,但我在数据库中为他添加了这个角色:在 AspNetUserRoles 表中,它有 会计师和ExecutiveExpert角色
【参考方案1】:
在这种情况下,会更新安全标记。您需要专门更新/重置安全印章
UserManager.UpdateSecurityStampAsync(userId);
这将有助于解决您的问题。
【讨论】:
以上是关于aspnet 身份中用户的多个角色的主要内容,如果未能解决你的问题,请参考以下文章
无法识别角色授权 - 带有 IdentityServer4 Cookie/Oidc 身份验证的 ASPNET CORE 5
当用户在 Blazor Webassembly 身份验证和授权中具有多个角色时出现问题?