Entity Framework, создайте суперпользователя
Я хочу создать суперпользователя в моем приложении ASP.NET MVC. Я прочитал, что я могу добиться этого, добавив "admin"
роль и проверка по фильтрам - у текущего пользователя есть эта роль.
Я читал в уроках, как создавать пользователей и роли при запуске приложения, но во всех уроках они не используют структуру сущностей. Поэтому я попытался создать суперпользователя в Configuration.cs
файл в Migration
папка:
namespace WebApp.Migrations
{
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using System;
using System.Data.Entity;
using System.Data.Entity.Migrations;
using System.Linq;
using WebApp.Models;
internal sealed class Configuration : DbMigrationsConfiguration<WebApp.Models.ApplicationDbContext>
{
protected override void Seed(WebApp.Models.ApplicationDbContext context)
{
var userManager = new ApplicationUserManager(new UserStore<ApplicationUser>(context));
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));
roleManager.Create(new IdentityRole { Name = "admin" });
var admin = new ApplicationUser { Email = "mail@growapps.ru", UserName = "Growapps" };
string password = "mail123";
var result = userManager.Create(admin, password);
if (result.Succeeded)
{
userManager.AddToRole(admin.Id, "admin");
}
}
}
}
Но после добавления миграций и обновления базы данных новый пользователь не появляется. Правильно ли я понимаю, что метод Seed вызывает после каждой миграции и должен создавать нового пользователя? Если да, что я делаю не так? Если нет, как еще я могу добавить суперпользователя при первом запуске моего веб-приложения?
1 ответ
Таким образом, ошибка не была очевидной, в представлении шаблона "вход в систему" (который генерируется ASP.NET MVC) вы должны ввести "email" и пароль, проблема в том, что метод Login в контроллере отправляет это поле электронной почты как имя пользователя, поэтому, если вы создадите пользователя в коде с разными значениями имени и адреса электронной почты, у вас возникнут трудности при входе в систему. Думаю, Microsoft следует изменить имя заполнителя поля в их шаблоне:D