Core 2.0,使用AspnetCore.Identity。我创建了一些角色,包括“Admin”。
//initializing custom roles
var RoleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
var UserManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
string[] roleNames = { "Admin", "Training", "Operations", "Membership", "Individual" };
IdentityResult roleResult;
foreach (var roleName in roleNames)
{
var roleExist = await RoleManager.RoleExistsAsync(roleName);
// ensure that the role does not exist
if (!roleExist)
{
//create the roles and seed them to the database:
roleResult = await RoleManager.CreateAsync(new IdentityRole(roleName));
}
}
我检查了SQL表,它们都在那里。:
然后我将自己添加到Admin角色(不是完整方法,而是相关部分):
var UserManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
var _eric = await UserManager.FindByEmailAsync("username@gmail.com");
await UserManager.AddToRoleAsync(_eric, "Admin");
我检查表格,我在那里(和另一个我加入不同角色的人一起):
然后我转到我的方法并使用两个角色授权它,其中一个我在(管理员):
[Authorize(Roles ="Training, Admin")]
public ActionResult Index()
{
return View();
}
然后我访问被拒绝。我错过了什么,但无法弄清楚我搞砸了哪一步。用户在那里,我已登录,数据表显示我已分配角色,并且Authorize标记看起来很好。
答案 0 :(得分:5)
角色是声明和声明仅在登录时加载。如果您修改声明(例如通过添加角色),则必须将用户签名并自动重新签名或提示用户重新进行身份验证,重新加载索赔。