加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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或为空,因为该集合未被手动加载.然后代码继续进行,就像没有为用户分配任何角色,实际上该集合从未被加载过.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读