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,而不是所有角色(accountantExecutiveExpert ) 并返回 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 身份验证和授权中具有多个角色时出现问题?

基于 JWT 身份验证和角色在 Express 中路由到多个 Angular 7 项目

具有多个角色的 Laravel 身份验证

如何在asp.net core中添加多个身份和多个角色

身份 aspnet 核心微服务