В проекте C# (ASP.NET Core) после входа в систему сайт должен отобразить меню с подменю в соответствии с разрешениями пользователя. Это меню отображается на всех сайтах. В основном это меню панели инструментов.Получить текущего пользователя в TagHelper
Содержание этого меню (подменю) динамически, согласно разрешению пользователя. Итак, я думаю, что при создании класса TagHelper, который получает текущего зарегистрированного пользователя, получите контент, который у этого пользователя имеет разрешение, и создайте содержимое подменю (somes <ul>
и <li>
).
Я не знаю, подходит ли это лучший подход. Я принимаю предложения.
Но если этот подход подходит для использования, как я могу получить текущего зарегистрированного пользователя в классе TagHelper? У меня нет HttpContext
на этом классе, только TagHelperContext
.
TagHelper:
public class UserContentTagHelper : TagHelper
{
private readonly UserManager<ApplicationUser> _userManager;
public UserContentTagHelper(UserManager<ApplicationUser> userManager)
{
_userManager = userManager;
}
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
output.TagMode == TagMode.SelfClosing;
// Error. HttpContext.User not avaliable
var uid = _userManager.GetUserId(HttpContext.User);
}
}
Обычно, чтобы получить текущий пользователь, я использую HttpContext.User
, но это уже доступно только на классе контроллера.
Спасибо!
работал! нужно только настроить DI IActionContextAccessor ('services.AddSingleton();') и, возможно, это опечатка, но uid должен быть 'var uid = _userManager.GetUserId (user);' –
Хорошая точка, обновленная ответ –