ASP.net MVC ASP.net Identity Seeding角色和用户
发布时间:2020-12-16 07:12:55 所属栏目:asp.Net 来源:网络整理
导读:在Migrations Configuration类中,有Seed方法,它看起来像: protected override void Seed(DatabaseContext context) { var roleManager = new RoleManagerIdentityRole(new RoleStoreIdentityRole(context)); var userManager = new UserManagerUser(new Use
在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和Administrator角色已连接. 但是当我将属性[Authorize(Roles =“Administrator”)]置于控制器上方时,我被重定向到登录页面,好像我的用户不在那个角色中,所以我在控制器中添加了一行: var x = _userManager.IsInRole(_userManager.FindByName("someUserName").Id,"Administrator"); 而x是假的.为什么会这样?我该如何解决?如果这不是种子数据库的正确方法,那是什么? 解决方法
尝试种子方法
context.Configuration.LazyLoadingEnabled = true; 这是我对禁用延迟加载时发生的事情的猜测,当UserManager或UserStore访问它时,IdentityUser / ApplicationUser对象的Roles属性为null或为空,因为该集合未被手动加载.然后代码继续进行,就像没有为用户分配任何角色,实际上该集合从未被加载过. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – 如何将配置转换应用于外部配置文件
- ASP.NET MVC3中基于权限的授权
- asp.net-mvc – 使用Windows身份验证和OWIN的ASP.NET MVC5
- 用asp解析svg xml
- asp.net-mvc-3 – FluentValidation入门问题
- 在asp.net中使用太多会话的缺点
- asp.net-mvc – 在MVC 3中回发到控制器操作后,ViewModel集合
- Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ext JS之显示
- asp.net-mvc – Azure移动服务与Web API
- asp.net-mvc – ASP.NET MVC绑定模型中的数组