2

我想在 asp.net mvc 项目中添加用户授权和身份验证。我是实体框架代码优先。现在我想为它创建一些默认用户和默认角色。为此,我想创建一个管理员角色,但它阻止了我已经存在名为 admin 和 Admin 的用户和角色。但是当我在我的数据库表中看到诸如 AspNetUSers 、 Role 等时,我没有找到任何命名的管理员。那么我该怎么做呢?

如果管理员角色和用户是内置的,那么密码在哪里。以及如何在我的应用程序首次运行时创建一些其他默认用户和角色。

我使用的是 MVC 5,而不是 mvc 4。这两者都有区别。

谢谢,

阿卜杜斯·萨拉姆·阿扎德

4

1 回答 1

5

由于没有人回答过您的问题,因此我会添加一些代码来说明如何在迁移时从 Seed 方法执行此操作。此代码用于在数据库中为具有管理员角色的初始用户播种。在我的情况下,只有“管理员”用户可以向站点添加新用户。

protected override void Seed(PerSoft.Marketing.Website.Models.ApplicationDbContext context)
{
    const string defaultRole = "admin";
    const string defaultUser = "someUser";

    // This check for the role before attempting to add it.
    if (!context.Roles.Any(r => r.Name == defaultRole))
    {
        context.Roles.Add(new IdentityRole(defaultRole));
        context.SaveChanges();
    }

    // This check for the user before adding them.
    if (!context.Users.Any(u => u.UserName == defaultUser))
    {
        var store = new UserStore<ApplicationUser>(context);
        var manager = new UserManager<ApplicationUser>(store);
        var user = new ApplicationUser { UserName = defaultUser };
        manager.Create(user, "somePassword");

        manager.AddToRole(user.Id, defaultRole);
    }
    else
    {
        // Just for good measure, this adds the user to the role if they already
        // existed and just weren't in the role.
        var user = context.Users.Single(u => u.UserName.Equals(defaultUser, StringComparison.CurrentCultureIgnoreCase));
        var store = new UserStore<ApplicationUser>(context);
        var manager = new UserManager<ApplicationUser>(store);
        manager.AddToRole(user.Id, defaultRole);
    }
}
于 2014-10-29T23:16:56.950 回答