基于角色的身份验证始终拒绝

时间:2018-10-25 09:42:04

标签: c# asp.net-core

我有一个新的带有Individual Account身份验证的ASP.NET Core 2.1项目。

我已跨数据库迁移以添加初始表并注册了一个测试用户帐户,该帐户已正确保存。

我现在希望能够在整个Admin Controllers内控制授权,但是由于某些原因,即使正确应用我的角色也总是被拒绝。

我在ApplicationUserIdentityUser(仅从IdentityRole继承,没有自定义道具)和startup.cs之间添加了相关性,如下所示:

        services.AddDefaultIdentity<ApplicationUser>()
            .AddRoles<IdentityRole>()
            .AddEntityFrameworkStores<ApplicationDbContext>();

像这样将ApplicationUser的上下文添加到我的ApplicationDbContext中:

   public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
            : base(options)
        {
        }

        protected override void OnModelCreating(ModelBuilder builder)
        {
            base.OnModelCreating(builder);
        }
    }

我播种了这样的角色:

    public async Task CreateRoles(IServiceProvider services)
    {
        var roleManager = services.GetRequiredService<RoleManager<IdentityRole>>();
        var userManager = services.GetRequiredService<UserManager<ApplicationUser>>();

        var adminExists = await roleManager.RoleExistsAsync("Admin");

        if (!adminExists)
        {
            await roleManager.CreateAsync(new IdentityRole("Admin"));
        }

        var user = await userManager.FindByEmailAsync("test@test.com");

        if(user == null)
        {
            var stew = new ApplicationUser()
            {
                Email = "test@test.com"
            };

            await userManager.CreateAsync(user, "password");
            await userManager.AddToRoleAsync(user, "Admin");
        }
    }

我在数据库中看到该角色已经使用唯一的GUID创建,并且我的测试帐户GUID与角色GUID之间的关联已添加到AspNetUserRoles中。

在我看来,这已经完成了,我应该可以添加:

[Authorize(Roles = "Admin")]

要阻止非管理员角色的用户帐户,但我经常被困

  

访问被拒绝。您无权查看此页面

即使我只有一个帐户,一个角色,并且该角色仅适用于我的单个帐户。

我在这里错过了明显的事情吗?我已经整修了一天左右,甚至做了一个新项目来测试我是否删除了一些样板,而且似乎不起作用。

0 个答案:

没有答案