ASP.NET Identity, uygulama geliştirme için birçok seçenek sunar ve uygulanması kolaydır. Ancak, uygulamanızın gerekli tüm rollere sahip olduğundan emin olmak beklenenden daha karmaşık olabilir. Bu yazıda, yapılandırma işlemini gerçekleştirmek için kullanabileceğiniz birkaç seçenek keşfedilmektedir.
Değerleri Seed Etme
Kullanıcılar genellikle, Entity Framework'ün .HasData() gibi yerleşik yöntemlerini kullanarak girdileri manuel olarak eklemeyi tercih eder. Ancak bu yöntem bana zahmetli ve hata yapmaya yatkın geliyor; çünkü verilerin Identity'nin istediği gibi eklenmesi gerektiğinden ve gelecekteki değişikliklerin kırılmalara yol açabileceğinden emin olmanız gerekir.
Başlatma Kodunu Kullanma
Benim tercih ettiğim yöntem, uygulamanız inşa edildikten ancak çalıştırılmadan önce bir başlatma adımı eklemektir. Bu, servis sağlayıcısına bağlanmanıza ve gerekli olduğu şekilde bağımlılık enjeksiyonunu kullanmanıza olanak tanır. Uygulamanın başlangıç zamanına olan etkisi minimaldir ve bir yapı bayrağı, yapılandırma ayarı veya başka bir yol ile devre dışı bırakılabilir. Bunu uygulamak için genellikle iki yöntem ve başlatma işlemini gerçekleştirmek için bir kod bloğu eklerim.
İlk Yöntem: Gerekli Roller Sisteme Eklenir
private static async Task EnsureRoles(IServiceProvider serviceProvider)
{
var roleManager = serviceProvider.GetRequiredService<RoleManager>();
var existingRole = await roleManager.RoleExistsAsync("Admin");
if (!existingRole)
{
await roleManager.CreateAsync(new Role { Name = "Admin" });
}
// Gerekli olduğu sürece bu işlem tekrarlanabilir.
}
İkinci Yöntem: Varsayılan Kimlik Bilgileriyle Kullanıcı Eklemek
Aşağıdaki kod, gerekli kullanıcıları ekler ve varsayılan kimlik bilgileriyle oluşturur. Bu bilgileri daha sonra değiştirebilirsiniz.
private static async Task EnsureUsers(IServiceProvider serviceProvider)
{
var userManager = serviceProvider.GetRequiredService<UserManager>();
var existingUser = await userManager.FindByEmailAsync("MyEmail");
if (existingUser == null)
{
var newUser = new UserProfile()
{
Email = "MyEmail",
UserName = "MyEmail",
EmailConfirmed = true,
FirstName = "Aydın",
LastName = "Yağız",
PhoneNumber = "MyNumber"
};
await userManager.CreateAsync(newUser, "MySPecialPassword");
await userManager.AddToRolesAsync(newUser, new[] { "Admin" });
}
}
Gerçek Başlatma Kodu
Son adımda, Program.cs dosyasındaki builder.Build() çağrısından sonra aşağıdaki kodu ekleyerek servis sağlayıcı üzerinden rolleri ve kullanıcıları ekleyebilirsiniz:
using (var scope = app.Services.CreateScope())
{
var serviceProvider = scope.ServiceProvider;
await EnsureRoles(serviceProvider);
await EnsureUsers(serviceProvider);
}
Bu kod, uygulama kapsamında bir servis sağlayıcı oluşturur ve roller ile kullanıcıları eklemek için Dependency Injection (DI) kullanarak gerekli işlemleri gerçekleştirir.
