Функция бритвы для запроса базы данных - PullRequest
0 голосов
/ 07 ноября 2018

Мне очень нравится удобство этой функции Razor, когда она запрашивает базу данных ASP.NET, чтобы увидеть, находится ли текущий пользователь в роли «Стандарт», в этом примере.

@if (User.IsInRole("Standard"))
{
    // Do something...
}

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

Не могу найти элегантного решения.

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Спасибо всем. В итоге я вызвал RenderAction () из представления и внутри контроллера, я вернул PartialView () в зависимости от результатов базы данных. Это позволило мне вернуть необходимый HTML-код в зависимости от результатов из таблицы организации в базе данных.

0 голосов
/ 07 ноября 2018

На самом деле не стоит помещать бизнес-логику в представление.

Решение зависит от того, чего вы пытаетесь достичь. Если вам нужно проверить, в каких ролях находится текущий пользователь, я бы добавил в ViewModel свойство, называемое UserRoles, которое содержит все роли, в которых находится текущий пользователь.

Псевдокод для ViewModel:

public class SomethingViewModel
{
     public IReadOnlyCollection<string> UserRoles { get; set; } // could be ICollection, IList, etc. depending on your coding style

     // Other properties
}

В вашем контроллере:

// this implementation is for Asp.Net Identity, use whatever implementation you need.
private IEnumerable<string> UserRoles 
    => ((ClaimsIdentity)User.Identity).Claims
            .Where(c => c.Type == ClaimTypes.Role)
            .Select(c => c.Value)


public ActionResult SomeAction()
{
     // do some processing
     var viewModel = new SomethingViewModel()
     {
         UserRoles = UserRoles.ToList()
     }
     return View(viewModel);
}

И затем вы используете это свойство в представлении:

@if (Model.UserRoles.Contains("Standard")) {/* do something*/}

Таким образом, бизнес-логика отделена от вашего представления , например, если вы измените способ хранения ролей, вы можете просто поменять вышеуказанное свойство, не беспокоясь о представлениях ролей. используется в.

Конечно, вы можете кэшировать пользовательские роли и т. Д., Этот код был просто демонстрацией основной идеи.

...