Лучший способ поиска людей в местоположении - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть 3 таблицы, в которых содержатся местоположения, пользователи и соответствующие им идентификаторы.Я пытаюсь добиться того, чтобы администратор мог искать пользователей в определенном месте.

Короче говоря, я пытаюсь разрешить Сэму, который является Администратором , находить пользователей только в его местоположении (ограниченном его местоположением), поэтому в этом примере Марк, который являетсяобычный пользователь находится в HeadLocation и Location1 и может быть найден Сэмом.

Таблица пользователей

|---------------------------------|
| UserId   |    Role   | FName    |
|---------------------------------|
|  1       |    Admin  | Sam      |

Таблица OfficeUser

|---------------------------------------|
| OfficeUserId | OfficeId     | UserId  |
|---------------------------------------|
|  55          |    1         |     1   |

Таблица Office

|----------------------------------------------|
| 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);
    }

1 Ответ

0 голосов
/ 19 февраля 2019

Это будет обобщенное представление вашего запроса.Могут быть некоторые ошибки при наборе, поскольку я набрал это здесь, а не в редакторе 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...