На самом деле не стоит помещать бизнес-логику в представление.
Решение зависит от того, чего вы пытаетесь достичь. Если вам нужно проверить, в каких ролях находится текущий пользователь, я бы добавил в 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*/}
Таким образом, бизнес-логика отделена от вашего представления , например, если вы измените способ хранения ролей, вы можете просто поменять вышеуказанное свойство, не беспокоясь о представлениях ролей. используется в.
Конечно, вы можете кэшировать пользовательские роли и т. Д., Этот код был просто демонстрацией основной идеи.