Asp.Net MVC 5 Identity如何不列出具有Admin角色的用户
本文关键字:Admin 角色 用户 何不列 MVC Net Identity Asp | 更新日期: 2023-09-27 18:14:31
有三个与角色相关的表。
-
AspNetUsers -保留
UserId
数据 -
AspNetRoles—保留
RoleName
和RoleId
-
AspNetUserRoles -通过AspNetUsers和aspnettrolles建立关系。它只有两个列,
UserId
和RoleId
。但是由于某种原因,我不能直接访问这个表(像db.UserRoles
)。
所以我要做的是避免列出Admin角色的用户。
我的代码是这样的:return View(db.Users.OrderBy(e => e.UserName)
.ToPagedList(pageNumber, pageSize));
我想我应该写这样的东西但是当我这样做的时候我总是会出错
return View(db.Users.Where(e => e.Roles.Where(r => r.RoleId != "1"))
.OrderBy(e => e.UserName)
.ToPagedList(pageNumber, pageSize));
// suppose that the RoleId of Admin is 1
return View(db.Users.Where(e => e.Roles.All(r => r.RoleId != "1"))
.OrderBy(e => e.UserName).ToPagedList(pageNumber, pageSize));
// Suppowse that the RoleId of Admin is 1
使用.All
扩展名
或db.Users.Where(u=>!u.Roles.Any(r=>r.RoleId == "1"))
试试这个:
const int adminRoleId = 1;
var query = db.Users.Where(user => !user.Roles
.Any(role => role.Id
== adminRoleId));
return View(query.OrderBy(e => e.UserName)
.ToPagedList(pageNumber, pageSize));
我认为在你的情况下,问题是由r.RoleId != "1"
引起的,我认为RoleId
是int
类型。而且,表达式Where(e => e.Roles.Where(r => r.RoleId != "1"))
是无效的。传递到第一个Where
的表达式树应该为指定的r
返回bool
(在您的上下文中是用户),但是您返回的是与admin不同的角色集合(而不是提到的bool
)。