Управление пользователями с помощью ASP.NET Core 2.0

Может быть, я что-то упускаю, но я прочитал кучу документации и статей по аутентификации и авторизации с использованием .NET Core 2.0, но ничего не нашел по управлению пользователями.

Чего я пытаюсь достичь, так это иметь пользовательский интерфейс администратора, который может создавать пользователей, перечислять всех существующих пользователей и назначать их предопределенным ролям и/или предопределенным политикам.

Я безуспешно пытался сделать это без везения (у меня возникают проблемы при попытке использовать такую ​​​​модель, как IEnumerable<IdentityUser>, относительно недопустимого конструктора:

InvalidOperationException: не удалось найти подходящий конструктор для типа «System.Collections.Generic.IEnumerable`1[Microsoft.AspNetCore.Identity.IdentityUser]». Убедитесь, что тип конкретен, а службы зарегистрированы для всех параметров общедоступного конструктора.

и я не могу получить RoleManager ни в одном контроллере. Он отлично работает с UserManager, но не с RoleManager. я добавил

        services.AddIdentity<ApplicationUser, IdentityRole>()
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();

к запуску, поэтому я учил, что DI будет вводиться автоматически...

ApplicationUser определяется следующим образом:

namespace KaraokeServices.Data
{
    public class ApplicationUser : IdentityUser
    {
    }
}

Я определил UserController, например:

namespace KaraokeServices.Controllers
{
    [Route("[controller]/[action]")]
    public class UserController : Controller
    {
        private readonly UserManager<ApplicationUser> userManager;

        public UserController(ApplicationDbContext pContext,  SignInManager<ApplicationUser> pSignInManager, ILogger<AccountController> logger)
        {
            userManager = pSignInManager.UserManager;
        }

        [HttpGet]
        public IActionResult Index()
        {
            List<ApplicationUser> users = new List<ApplicationUser>();

            users = userManager.Users.ToList();

            return View(users);
        }
    }
}

А вот и User/Index.cshtml

@page
@model IEnumerable<ApplicationUser>

@{
    ViewData["Title"] = "Gestion des utilisateurs";
}

    <h2>@ViewData["Title"]</h2>
    <form method="post">
        <table class="table">
            <thead>
                <tr>
                    <th>Courriel</th>
                    <th>Roles</th>
                    <th>Actions</th>
                </tr>
            </thead>
            <tbody>
                @foreach (var user in Model)
            {
                    <tr>
                        <td>@user.Email</td>

                        <td></td>
                        <td>
                            <a asp-page="./Edit" asp-route-id="@user.Id">Éditer</a>
                            <button type="submit" asp-page-handler="delete" asp-route-id="@user.Id">
                                Effacer
                            </button>
                        </td>
                    </tr>
                }
            </tbody>
        </table>

        <a asp-page="./Create">Créer</a>
    </form>

но я всегда застрял с ошибкой ...

Что я делаю неправильно?


person Redge    schedule 17.11.2017    source источник
comment
Пожалуйста, добавьте определение ApplicationUser.   -  person Cake or Death    schedule 17.11.2017
comment
Я только что отредактировал сообщение, чтобы добавить конкретную информацию. ApplicationUser, а также UserController.   -  person Redge    schedule 17.11.2017
comment
Вам нужно добавить include AddUserStore() и AddRoleStore() см. Проблемы с инъекцией Менеджер ролей   -  person Cake or Death    schedule 17.11.2017


Ответы (1)


Вместо

services.AddIdentity<ApplicationUser, IdentityRole>()
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();

Добавьте менеджеров в

services.AddIdentity<User, Role>()
                .AddEntityFrameworkStores<AuthContext>()
                .AddUserManager<UserManager>()
                .AddSignInManager<SignInManager>()
                .AddDefaultTokenProviders();

И попробуй с

@model ICollection<ApplicationUser> вместо этого?

person Nicholas    schedule 23.02.2019