获取在asp.net Identity 2.0中分配了角色的用户列表 [英] Get list of users with assigned roles in asp.net identity 2.0
问题描述
我有一个下拉列表框,其中列出了角色.我想获取具有该角色的用户列表.我的意思是具有管理员"角色或"CanEdit"角色的用户列表.这是我的代码:
public IQueryable<Microsoft.AspNet.Identity.EntityFramework.IdentityUser>
GetRolesToUsers([Control] string ddlRole)
{
//ddlRole returns role Id, based on this Id I want to list users
var _db = new ApplicationDbContext();
IQueryable<Microsoft.AspNet.Identity.EntityFramework.IdentityUser> query = _db.Users;
if (ddlRole != null)
{
//query = query.Where(e => e.Claims == ddlRole.Value); ???????
}
return query;
}
请帮助.
更新的代码(仍然错误)
public List<IdentityUserRole> GetRolesToUsers([Control]string ddlRole)
{
var roleManager =
new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));
var users = roleManager.FindByName("Administrator").Users.ToList();
return users;
}
错误:当ItemType设置为"Microsoft.AspNet.Identity.EntityFramework.IdentityUser"时,选择方法必须返回"IQueryable"或"IEnumerable"或"Microsoft.AspNet.Identity.EntityFramework.IdentityUser"之一.>
我尝试了各种铸造,但没有一个帮助.
更新(有效的解决方案)
感谢chris544,他的想法帮助我解决了这个问题.这是工作方法:-
public List<ApplicationUser> GetRolesToUsers([Control]string ddlRole)
{
var context = new ApplicationDbContext();
var users =
context.Users.Where(x => x.Roles.Select(y => y.RoleId).Contains(ddlRole)).ToList();
return users;
}
不是专家,但是...
Identity中似乎没有内置的功能,我也无法从内置的Roles中使用它(它似乎不适用于基于声明的Identity).
所以我最终做了这样的事情:
var users = context.Users
.Where(x => x.Roles.Select(y => y.Id).Contains(roleId))
.ToList();
-
x.Roles.Select(y => y.Id)
获取user x
的所有角色ID的列表
-
.Contains(roleId)
检查此ID列表是否包含必要的roleId
I have a drop down list box which lists roles. I want to get the list of users having that role. I mean list of users that are in "Administrator" role or "CanEdit" role. Here is my code:
public IQueryable<Microsoft.AspNet.Identity.EntityFramework.IdentityUser>
GetRolesToUsers([Control] string ddlRole)
{
//ddlRole returns role Id, based on this Id I want to list users
var _db = new ApplicationDbContext();
IQueryable<Microsoft.AspNet.Identity.EntityFramework.IdentityUser> query = _db.Users;
if (ddlRole != null)
{
//query = query.Where(e => e.Claims == ddlRole.Value); ???????
}
return query;
}
Please help.
Updated Code (still error)
public List<IdentityUserRole> GetRolesToUsers([Control]string ddlRole)
{
var roleManager =
new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));
var users = roleManager.FindByName("Administrator").Users.ToList();
return users;
}
Error: The Select Method must return one of "IQueryable" or "IEnumerable" or "Microsoft.AspNet.Identity.EntityFramework.IdentityUser" when ItemType is set to "Microsoft.AspNet.Identity.EntityFramework.IdentityUser".
I tried various castings but none of them helped.
UPDATE (working solution)
Thanks to chris544, his idea helped me to fix this. Here is working method:-
public List<ApplicationUser> GetRolesToUsers([Control]string ddlRole)
{
var context = new ApplicationDbContext();
var users =
context.Users.Where(x => x.Roles.Select(y => y.RoleId).Contains(ddlRole)).ToList();
return users;
}
Not an expert, but ...
There seemed to be no built in funcionality for this in Identity and I could not get it work from built in Roles also (it seems to not work with claims based Identity).
So I ended up doing something like this:
var users = context.Users
.Where(x => x.Roles.Select(y => y.Id).Contains(roleId))
.ToList();
x.Roles.Select(y => y.Id)
gets a list of all role ids foruser x
.Contains(roleId)
checks if this list of ids contains necessaryroleId
这篇关于获取在asp.net Identity 2.0中分配了角色的用户列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!