【发布时间】:2014-12-14 17:12:52
【问题描述】:
我有这个与自动完成一起使用的 linq 查询,传入一个匹配电子邮件或用户名的术语,它从我的数据库返回用户详细信息 (UserDetails)
var details = db.AspNetUsers
.Join(db.UserDetails,
anu => anu.Id, ud => ud.Id, (anu, ud) => new { anu, ud })
.Where(@t => @t.anu.Email.Contains(term)
|| (@t.ud.firstname + @t.ud.lastname).Contains(term))
.OrderBy(@t => @t.ud.lastname)
.ThenBy(@t => @t.ud.firstname)
.ThenBy(@t => @t.anu.Email)
.Select(@t => new MemberDetails
{
FirstName = @t.ud.firstname,
LastName = @t.ud.lastname,
Email = @t.anu.Email,
Phone = @t.ud.phone,
Postcode = @t.ud.postcode,
MemberNumber = @t.ud.membershipNumber,
Street = @t.ud.street,
City = @t.ud.city,
}).ToList();
我缺少的是,假设我是登录用户,我创建了一个名为 UserRoleAdmins 的表,其中包含 2 列
- RoleId nvarchar(128)
- UserId nvarchar(128)
RoleId 是 AspNetRoles 表的 FK,而 UserId 是我的 UserDetails 表的 FK
假设我们有 3 个角色,红队、蓝队、绿队,我是红队和绿队的管理员,所以 UserRolesAdmin 表中的 2 条记录包含红队 id 和我的用户 id,以及绿色的团队 id 和我的用户 id
我想确保我返回的用户属于红队或绿队
【问题讨论】:
-
你为什么使用
@t?它只会让阅读变得更加困难。 -
澄清一下,您希望查询返回查询用户所属团队的所有用户吗?管理员会从他的所有团队中获取用户,但“简单”用户只会从他的团队中获取用户。
-
是的,这是正确的,我不能从字面上说出 == "Admin" 的位置,因为我不知道他们的角色。只允许管理员用户返回用户,普通的非管理员用户不能。