【发布时间】:2013-12-26 13:29:45
【问题描述】:
在 Migrations Configuration 类中,有 Seed 方法,它看起来像:
protected override void Seed(DatabaseContext context)
{
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));
var userManager = new UserManager<User>(new UserStore<User>(context));
if (!roleManager.RoleExists("Administrator"))
{
roleManager.Create(new IdentityRole("Administrator"));
}
var user = new User {UserName = "someUserName"};
if (userManager.FindByName("someUserName") == null)
{
var result = userManager.Create(user, "password");
if (result.Succeeded)
{
userManager.AddToRole(user.Id, "Administrator");
}
}
}
然后在 PM 控制台中我运行了 update-database,它成功地为数据库播种,在表 AspNetUserRoles 中我可以看到用户 someUserName 和管理员角色已连接。
但是当我将属性 [Authorize(Roles = "Administrator")] 放在控制器上方时,我被重定向到登录页面,就好像我的用户不在那个角色中一样,所以我在控制器中添加了一行:
var x = _userManager.IsInRole(_userManager.FindByName("someUserName").Id, "Administrator");
x 是假的。为什么会这样?我该如何解决?如果这不是播种数据库的正确方法,那是?
【问题讨论】:
标签: asp.net asp.net-mvc asp.net-mvc-5 asp.net-identity