我有一个新的带有Individual Account
身份验证的ASP.NET Core 2.1项目。
我已跨数据库迁移以添加初始表并注册了一个测试用户帐户,该帐户已正确保存。
我现在希望能够在整个Admin Controllers
内控制授权,但是由于某些原因,即使正确应用我的角色也总是被拒绝。
我在ApplicationUser
和IdentityUser
(仅从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")]
要阻止非管理员角色的用户帐户,但我经常被困
访问被拒绝。您无权查看此页面
即使我只有一个帐户,一个角色,并且该角色仅适用于我的单个帐户。
我在这里错过了明显的事情吗?我已经整修了一天左右,甚至做了一个新项目来测试我是否删除了一些样板,而且似乎不起作用。