Атрибут Authorize Roles Controller не работает в ASP Core 2.2 - PullRequest
0 голосов
/ 25 октября 2019

Authorize Attribute не работает в ASP Core 2.2 при размещении поверх контроллера. Мой файл startup.cs настроен следующим образом.

        //Add Claims
        services.AddScoped<IUserClaimsPrincipalFactory<User>, UserClaimsPrincipalFactory<User, Role>();

        //Add Context
        services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
        services.AddHttpContextAccessor();
        services.AddDbContext<DbContext>();
        services.AddIdentity<User, Role>(
            config =>
            {
                config.SignIn.RequireConfirmedEmail = true;
                config.User.RequireUniqueEmail = true;
            }
            )
            .AddRoles<Role>()
            .AddRoleManager<RoleManager<Role>>()
            .AddDefaultUI(UIFramework.Bootstrap3)
            .AddDefaultTokenProviders()
            .AddClaimsPrincipalFactory<MyUserClaimsPrincipalFactory>()
            .AddEntityFrameworkStores<DbContext>();


        //Add MVC
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
        services.AddAuthorization();
        services.AddAuthentication();

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

Но когда я делаю это на контроллере.

    [Authorize(Roles = "Administrator")]
    [HttpGet]
    public async Task<IActionResult> Index()
    {
      return View();
    }

Это не работает, и мне отказывают в доступе, несмотря на наличие необходимых ролей в удостоверении. Это известная ошибка, и кому-нибудь удалось заставить атрибуты роли работать в ASP Core 2.2?

Ответы [ 2 ]

0 голосов
/ 26 октября 2019

Я получил роли на основе утверждений, работающих в ASP Core 2.2. Роли без утверждений не работают (это можно исправить в ASP Core 3.0).

Необходимо добавить значения в таблицы RoleClaim и UserClaim после создания ролей (таблица ролей) и добавления пользователей в эти роли (UserRoleтаблица).

Редактировать ...

В основном добавьте пользователей в роли и используйте файлtytypes.role в IUserClaimsPrincipalFactory, чтобы вернуть роль или добавить роли пользовательского утверждения вручную, используя usermanager & rolemanager.

0 голосов
/ 25 октября 2019
    //Add Claims
    services.AddScoped<IUserClaimsPrincipalFactory<User>, 
    UserClaimsPrincipalFactory<User, Role>();

    //these should be move AddMvc
    services.AddAuthorization();
    services.AddAuthentication();

    //Add Context
    services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
    services.AddHttpContextAccessor();
    services.AddDbContext<DbContext>();
    services.AddIdentity<User, Role>(
        config =>
        {
            config.SignIn.RequireConfirmedEmail = true;
            config.User.RequireUniqueEmail = true;
        }
        )
        .AddRoles<Role>()
        .AddRoleManager<RoleManager<Role>>()
        .AddDefaultUI(UIFramework.Bootstrap3)
        .AddDefaultTokenProviders()
        .AddClaimsPrincipalFactory<MyUserClaimsPrincipalFactory>()
        .AddEntityFrameworkStores<DbContext>();


    //Add MVC
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...