我想使用EntityFramework
运行查询 Get(u => u.Roles.Contains("Administrator"));
其中Get操作与教程中的操作相同:
我想以这种方式使用它,因为我需要它来通过DbContext,因为它只是来自控制器的一行,我想保持请求的一致性。
所以我的问题是你如何做到这一点以及让所有用户具有特定角色的最佳方式是什么?
修改
以下是我最终使用的代码:
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));
string roleId = roleManager.FindByName("Administrator").Id;
return Get(x => x.Roles.Select(y => y.RoleId).Contains(roleId));
答案 0 :(得分:2)
另一个答案很接近,但您需要首先查找RoleId
角色的Administrators
(因为IdentityUserRole
没有{\ n} {不幸的是,{1}}财产。)一旦你得到了它,它就相对简单了。
在下面的示例中,我嵌套了另一个查询,以便将Name
的所有用户至少有一个Roles
与特定IdentityUserRole
RoleId
如果您不确定如何执行查找,请参阅相关SO问题的this answer
答案 1 :(得分:0)
您没有使用.Contains()
如何使用它。查看文档:{{3}}
Doc说它&#34;确定一个序列是否包含指定的元素。&#34;是否意味着T / F.它不会抓取包含指定角色的用户。您需要使用.Where()
扩展名。它可能看起来像这样:
var users = userRepo.Where(u => u.Roles.Contains(r => r.Name == "Administrator"));
所以现在,你正在让用户在任何角色中拥有一个名为&#34;管理员&#34;
的角色答案 2 :(得分:-1)
尝试使用U.Roles.Name == "Administrator"
或类似的东西吗?