Asp.NET Core Identity – Kullanıcı ve Rol Modellerinde Custom Property Tanımlamak – IV

Merhaba,

Asp.NET Core Identity yazı dizimizin bu 4. içeriğinde “IdentityUser” sınıfından türeyen “AppUser” isimli kullanıcı modelimize custom property ekleyerek özel kolonlar oluşturmayı inceleyeceğiz ve bunun yanında “IdentityRole” sınıfından türeyen bir kullanıcı rollerini modellediğimiz sınıf tasarlayarak benzer mantıkta o model içerisinde custom propertyler ile nasıl özel kolonlar oluşturulduğunada ekstradan değinmiş olacağız. Ayriyetten önceki içeriklerimiz neticesinde gördüğümüz primary key (Id) yapılanmasının varsayılan olarak nvarchar olarak değil de istediğimiz bir tipte ayarlanmasının (int, string, long vs.) nasıl yapıldığını inceleyeceğiz. O halde buyrun başlayalım…

IdentityUser’dan Türeyen “AppUser” Sınıfına Custom Property Eklemek

Uygulamadaki kullanıcılarımızı modellediğimiz “IdentityUser” sınıfından türetilen “AppUser” sınıfını önceki makalelerde gerçekleştirdiğimiz gibi salt bir şekilde aşağıdaki gibi inşa edersek direkt olarak bir kullanıcıyı temsil eden genel geçer propertylerle veritabanına migrate edilecektir.

    public class AppUser : IdentityUser
    {
    }

Asp.NET Core Identity - Kullanıcı Modelinde Custom Property Tanımlamak - IV
Eğer ki, uygulamamızda kullanıcılarımıza dair daha fazla bilgi tutacaksak ilgili model içerisine aşağıdaki gibi custom propertyleri yerleştirebiliriz.

    public class AppUser : IdentityUser
    {
        public string Memleket { get; set; }
        public bool Cinsiyet { get; set; }
    }

Bu işlem migrate neticesinde oluşturulacak fiziksel tabloya aşağıdaki gibi yansıyacaktır;
Asp.NET Core Identity - Kullanıcı Modelinde Custom Property Tanımlamak - IV

Evet… Görüldüğü üzere kullanıcı tablolarında kendimize özel kolonlar tanımlayabilmek bu kadar basit.

Şimdi ise bir rol modeli oluşturmayı inceleyelim.

IdentityRole’den Türeyen “AppRole” Sınıfını Oluşturmak ve Uygulamaya Dahil Etmek

Bir rol modeli tanımlayabilmek için “Models” -> “Authentication” klasörü içerisine “AppRole” isminde sınıf oluşturunuz ve bu sınıfı aşağıdaki gibi IdentityRole sınıfından türetiniz.

    public class AppRole : IdentityRole
    {
        public DateTime OlusturulmaTarihi { get; set; }
    }

Artık bu rol modelinin uygulamada kullanılacağını belirtmemiz gerekmektedir. Bunun için DbContext sınıfımıza gelip aşağıdaki gibi çalışma gerçekleştiriyoruz;

    public class AppDbContext : IdentityDbContext<AppUser, AppRole, string>
    {
        public AppDbContext(DbContextOptions<AppDbContext> dbContext) : base(dbContext) { }
    }

Yukarıdaki kod bloğunu incelersek eğer, “IdentityDbContext” sınıfına generic olarak user modelinde “AppUser” sınıfının, role modelinde ise “AppRole” sınıfının kullanılacağını belirtmiş oluyoruz. 3. parametrede ise bu yapılanmanın primary key (Id) kolonlarının “string” tipte değerlerle tutulacağını ifade etmiş oluyoruz. Keza makalemizin ileriki satırlarında bu değeri hangi hususlara dayanarak değiştirebiliyoruz kritik yaparak ele alacağız.

Velhasıl bu işlemden sonra “Startup.cs” dosyasındaki “ConfigureServices” metodu içerisinde uygulamaya Identity servisini dahil ettiğimiz “AddIdentity” metodunda oluşturduğumuz “AppRole” sınıfını generic olarak belirtmemiz gerekmektedir.

        public void ConfigureServices(IServiceCollection services)
        {
            .
            .
            services.AddIdentity<AppUser, AppRole>().AddEntityFrameworkStores<AppDbContext>();
            .
            .
        }

Tüm bu işlemler neticesinde uygulamayı derleyip, tekrar migrationları oluşturduktan sonra update edersek eğer aşağıdaki gibi rol mekanizmasının uygulamaya dahil edildiğini görebileceksiniz…
Asp.NET Core Identity - Kullanıcı Modelinde Custom Property Tanımlamak - IV

Bu adımdan da sonra sıra veritabanındaki primary key (Id) kolonları üzerinde manuel tip değişikliğine gelmiştir.

Primary Key(Id) Kolonlarının Tipini Belirleme

Bu işlem için DbContext sınıfımızdaki base class olan “IdentityDbContext” sınıfının sonuncu generic parametresine istediğimiz tipi vermemiz yeterli olacaktır.
Asp.NET Core Identity - Kullanıcı Modelinde Custom Property Tanımlamak - IV
Tabi yeterli olacaktır ama gidişatınız bu şekildeyse yukarıdaki olası hatada kaçınılmaz olacaktır. Yapılanmada tüm sistemin tipini string dışında belirleyebilmek istiyorsanız “AppUser” ve “AppRole” sınıflarınında id yapılanmasının tipini generic olarak belirtmeniz gerekmektedir ve bu context sınıfındaki tip ile tutarlı olmalıdır.
Asp.NET Core Identity - Kullanıcı Modelinde Custom Property Tanımlamak - IV

“Hoca önceki örneğimizde bu tip string iken bir hata almıyorduk! Neden string dışında yapınca alıyoruz?” sorunuzu duyar gibiyim… Evet, almıyorduk. Çünkü varsayılan tüm yapılanma string olarak tasarlanmıştır. Aksi durumdaki tüm tipleri bu şekilde belirtmemiz gerekmektedir.

Nihai olarak bu noktada migrate edilen veritabanındaki tüm primary key kolonlar belirtilen tipte oluşturulmuş olacaktır.

İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Not : Örnek projeyi indirmek için buraya tıklayınız.

Bunlar da hoşunuza gidebilir...

1 Cevap

  1. 11 Ağustos 2019

    […] Asp.NET Core Identity – Kullanıcı ve Rol Modellerinde Custom Property Tanımlamak – IV […]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir