Как отобразить только имя пользователя в поле зрения? - PullRequest
1 голос
/ 02 мая 2019

Я хотел бы отобразить роль в представлении в ASP.NET Core.Я захожу в приложение и у меня есть информация: Привет, {Пользователь}, у тебя есть разрешение: {разрешение}.

Как это сделать?Я искал различные справочники, но там ничего не упоминалось.

Я пробовал с ним:

@using Microsoft.AspNetCore.Identity
@using EarSystem.Models
@inject SignInManager<UserApp> Sign
@inject UserManager<UserApp> UserLog
@{ 
    Layout = "~/Views/Shared/_LayoutPanel.cshtml";
}
@if (User.Identity.IsAuthenticated)
{
    <div>
        <h1>Your Account:</h1>
        <ul>
            <li><b>Login:</b><p>@UserLog.GetUserName(User)</p></li>
            <li>
                @foreach (var claim in User.Claims)
                {
                    <b>Role:</b><p>@claim</p>
                }
            </li>
        </ul>
    </div>
}
else
{
    <p></p>
}

@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}

Результат:

enter image description here

Мне нужен результат, только роль пользователя подчеркнута желтым цветом.

Ответы [ 2 ]

1 голос
/ 02 мая 2019

Измените свой код на

@{
  var roles = User.Claims.Where(c => c.Type == ClaimTypes.Role).Select(c => c.Value).ToList();
}
<li>
 @foreach (var claim in roles)
 {
     <b>Role:</b><p>@claim</p>
 }

0 голосов
/ 02 мая 2019

Вы можете ввести IHttpContextAccessor для доступа к текущему HttpContext и пользователю в поле зрения. Затем получите все роли пользователя, используя UserManager.GetRolesAsync(user).

@using Microsoft.AspNetCore.Identity
@using EarSystem.Models
@inject SignInManager<UserApp> Sign
@inject UserManager<UserApp> UserLog

@using Microsoft.AspNetCore.Http
@inject IHttpContextAccessor HttpContextAccessor

@{
    Layout = "~/Views/Shared/_LayoutPanel.cshtml";
}
@if (User.Identity.IsAuthenticated)
{
    var user = await UserLog.GetUserAsync(HttpContextAccessor.HttpContext.User);
    var roles = await UserLog.GetRolesAsync(user);
    <div>
        <h1>Your Account:</h1>
        <ul>
            <li><b>Login:</b><p>@UserLog.GetUserName(User)</p></li>
            <li>
                @foreach (var role in roles)
                {
                    <b>Role:</b><p>@role</p>
                }
            </li>
        </ul>
    </div>
}  

В файле startup.cs ConfigureServices, зарегистрируйтесь IHttpContextAccessor:

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

Убедитесь, что вы добавили роли в базу данных, а также зарегистрированному пользователю назначена роль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...