public void AddUserToRole(Guid userId, string roleName)
{
var userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(DbContext));
var user = userManager.FindById(userId.ToString());
userManager.AddToRole(user.Id, roleName);
DbContext.SaveChanges();
}
我尝试将用户添加到如上所示的角色。但是它不起作用,因为在尝试转到以下控制器操作时:
[AuthorizeUser(Roles = RoleEnums.UserWithProfile)]
public ActionResult Index(Guid? userProfileId)
{
}
未能授权。奇怪的是,它成功地管理了授权在数据库播种中添加的用户。
private void SeedUserRoles(List<ApplicationUser> applicationUsers, DbContext dbContext)
{
var userStore = new UserStore<ApplicationUser>(dbContext);
var userManager = new UserManager<ApplicationUser>(userStore);
userManager.AddToRole(applicationUsers[0].Id, RoleEnums.UserWithProfile);
userManager.AddToRole(applicationUsers[1].Id, RoleEnums.UserWithProfile);
userManager.AddToRole(applicationUsers[2].Id, RoleEnums.UserWithProfile);
userManager.AddToRole(applicationUsers[3].Id, RoleEnums.User);
}
private void CreateRoles(DbContext context)
{
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));
if (!roleManager.RoleExists(RoleEnums.Admin))
{
var role = new IdentityRole { Name = RoleEnums.Admin };
roleManager.Create(role);
}
if (!roleManager.RoleExists(RoleEnums.User))
{
var role = new IdentityRole { Name = RoleEnums.User };
roleManager.Create(role);
}
if (!roleManager.RoleExists(RoleEnums.UserWithProfile))
{
var role = new IdentityRole { Name = RoleEnums.UserWithProfile };
roleManager.Create(role);
}
}
我在这里缺少什么?方法AddUserToRole()是否不正确,为什么只有种子给我正确的行为?
编辑:ASP.NET Identity check user roles is not working发现了这一点,这似乎是问题所在。但我不希望用户必须手动注销并再次注册。他们提到了有关更新安全标记的内容,但这对我不起作用。
Edit2:看到我发布的答案,我最终找到了解决方案。
答案 0 :(得分:0)
AddToRole返回一个IdentityResult。您需要在Errors字符串集合中检查此错误的返回值。
https://msdn.microsoft.com/en-us/library/dn497483(v=vs.108).aspx
您还应该检查实际获得该用户的FindById的返回。
答案 1 :(得分:0)
MVC 5 AddToRole requires logout before it works?
我最终使用了这个问题的解决方案,因为这是我能找到的最简单的解决方案。