Как использовать роли в ASP.NET Core 2.1? - PullRequest
0 голосов
/ 19 мая 2018

Я создал тестовый проект, используя:

dotnet new razor --auth Individual --output Test

Это создает Startup.cs, который содержит:

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
    {
        // This lambda determines whether user consent for non-essential cookies is needed for a given request.
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });

    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlite(
            Configuration.GetConnectionString("DefaultConnection")));

    services.AddDefaultIdentity<IdentityUser>()
        .AddEntityFrameworkStores<ApplicationDbContext>();

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}

Я хочу заполнить некоторых пользователей и ролей.И пользователи, и роли будут использовать одно и то же хранилище (SQLite).Я использую статический класс для заполнения, который вызывается из Program.

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

* 1012.* В ASP.NET Core 2.0 используется следующее:
services.AddIdentity<IdentityUser, IdentityRole>()

Я предполагаю, что AddDefaultIdentity является новым в 2.1, но проблема в том, что он не вводит RoleMnager, так что я долженделать?

Ответы [ 4 ]

0 голосов
/ 06 июля 2019

Я тоже боролся с этой проблемой некоторое время назад.Я не мог заставить роли работать.

В моем проекте я использовал ASP.NET Core 2.1 (это можно было исправить в 2.2, см. Ссылку), а также создал некоторые страницы.

После долгого времениПоиски в Интернете Я нашел это решение (которое также упоминалось выше в Выпуск 1813 )

Решение было для меня (как предложено в статье) добавить следующую строку с IUserClaimsPrincipalFactory:

        services.AddScoped<IUserClaimsPrincipalFactory<IdentityUser>, 
            UserClaimsPrincipalFactory<IdentityUser, IdentityRole>>();

        services.AddDefaultIdentity<IdentityUser>()
            .AddRoles<IdentityRole>()
            .AddRoleManager<RoleManager<IdentityRole>>()
            .AddDefaultTokenProviders()
            .AddEntityFrameworkStores<TranslatorDbContext>();
0 голосов
/ 21 июня 2018

Может помочь кому-то еще: если вы добавите идентификацию asp.net через строительные леса в существующий проект, вам нужно отредактировать IdentityHostingStartup.cs и изменить службы там, а не в классе запуска:

services.AddIdentity<AppUser, IdentityRole>()
                .AddDefaultUI()
                .AddRoles<IdentityRole>()
                .AddRoleManager<RoleManager<IdentityRole>>()
                .AddDefaultTokenProviders()
                .AddEntityFrameworkStores<authContext>();

И тогда вы можете использовать менеджер ролей для своего заполнения.

0 голосов
/ 16 июля 2018

В дополнение к уже предоставленным ответам, несмотря на добавление .AddRoles<Identity>(), я все еще не мог получить Авторизацию при использовании Authorize(Roles = "Administrator") на моих контроллерах.По какой-то причине «утверждение о роли не влияет на IsUserInRole или AuthorizeAttribute с именем роли».

Чтобы использовать роли, я бы предложил использовать ASP.NET 2.0 следующим образом:

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

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

См. Эту проблему на aspnet github: Выпуск 1813

0 голосов
/ 19 мая 2018

Кажется, что, наконец, Microsoft поняла, что не каждому приложению нужны роли, и разделила их.

Обратите внимание, что AddDefaultIdentity объявлено как:

public static IdentityBuilder AddDefaultIdentity<TUser>(this IServiceCollection services) where TUser : class;

Итак, вы можете продолжить настройкуВарианты идентичности через это IdentityBuilder.Что вы хотите сделать:

services.AddDefaultIdentity<IdentityUser>().AddRoles<IdentityRole>();

К счастью, они также удалили ограничения IUser и IRole, поэтому теперь вы можете использовать модели в совершенно отдельной сборке, не устанавливая сотни пакетов NuGet..

...