c# - 搜索位置人员的最佳方式
问题描述
我有 3 个表格,其中包含位置、用户及其相关 ID。我想要实现的是允许管理员能够搜索特定位置的用户。
所以简而言之,我试图让作为管理员的 Sam 只能在他的位置(仅限于他的位置)找到用户,所以在这个例子中,作为普通用户的 Mark 位于HeadLocation
并且Location1
可以被 Sam 找到.
用户表
|---------------------------------|
| UserId | Role | FName |
|---------------------------------|
| 1 | Admin | Sam |
OfficeUser 表
|---------------------------------------|
| OfficeUserId | OfficeId | UserId |
|---------------------------------------|
| 55 | 1 | 1 |
办公桌
|----------------------------------------------|
| OfficeId | HeadOfficeId | LocNames |
|----------------------------------------------|
| 1 | null | HeadLocation |
|----------------------------------------------|
代码
[HttpGet]
public IActionResult SearchUsers(string searchUser, string id)
{
//userId from claims
var userId = User.FindFirst(ClaimTypes.NameIdentifier).Value;
//gets userId for users with role of admin
var admin = _context.User.FirstOrDefault(a => a.Role == "Admin")?.UserId.ToString();
if (adminExists && admin == userId)
{
//This is where I'm unclear...
var search = from a in _context.OfficeUser
join b in _context.Office
on a.OfficeId equals a.OfficeId
select new
{
a.UserId,
//trying to get names per locations
};
if (search == null)
{
return NotFound();
}
if (!String.IsNullOrEmpty(searchUser))
{
search = search.Where(a => a.FName.Contains(searchUser));
}
else
{
return NotFound("No Users Found");
}
}
return Ok(search);
}
解决方案
这将是您查询的一般视图。可能有一些打字错误,因为我在这里输入了这个,而不是在 Visual Studio 编辑器中。
[HttpGet]
public IActionResult SearchUsers(string searchUser, string id)
{
var loggedInUserId = User.FindFirst(ClaimTypes.NameIdentifier).Value;
var isLoggedInUserAdmin = _context.User.Any(u => u.UserId == loggedInUserId && u.Role == "Admin");
if (isLoggedInUserAdmin)
{
var adminLocations = _context.OfficeUser.Where(ou => ou.UserId == userId).Select(ou => ou.Office.LocNames).ToList();
var searchQuery = _context.OfficeUsers.Where(ou => adminLocations.Contains(ou.Office.LocNames)).Select(ou => ou.User);
if (!String.IsNullOrEmpty(searchUser))
{
searchQuery = searchQuery.Where(q => q.FName.Contains(searchUser));
}
var adminLocUserList = searchQuery.ToList();
return Ok(userList)
}
var userList = _context.OfficeUsers.Where(ou.User.FName.Contains(searchUser)).Select(ou => ou.User).ToList();
return Ok(userList);
}
推荐阅读
- javascript - 如何对数组中指向其他对象的对象进行分组
- woocommerce - Woocommerce 出口母产品
- c# - 使用 Stylet 配置后如何访问我的 DatabaseContext
- php - 如何让我的 Wordpress 插件接收数据并在 ajax/php 请求中将其中继到需要身份验证的远程服务器?
- android - 是什么导致TextView垂直移位
- mysql - 为什么EXPLAIN和Slow query的结果差别很大?
- firebase - 如何使用 firebase 从 React Native 应用程序接收邮件?
- javascript - 单击时停止关闭对话框
- javascript - 如何发送函数(数据)的值而不是将其发送到 $(“#timer”)?
- imacros - 循环一段特定的代码(我不知道我在做什么)