Uygulama İçerisinde Kimlik Kullanma
Yapılacaklar listesinde hala kullanıcı bazında bir ayrım bulunmamaktadır.[Authorize]
özelliği sayesinde kullanıcı giriş yaptıysa tüm listeyi görebiliri. Bunun ile birlikte giren kullanıcıya göre bu filtreyi genişletmek gerekmekte.
Öncelikle UserManager<Applicationuser>
'ı TodoController
a enjekte edin.
Controllers/TodoController.cs
Üst taraftaki using
cümlesine dikkat edin.
UserManager
sınıfı ASP.NET Core Kimlik'e ait bir sınıftır. Bu sınıf sayesinde kullanıcıya ait bilgileri alabilirsiniz.
Aksiyon içerisinden User
özelliğini kullanarak UserManager
vasıtası ile kullanıcıların özelliklerine erişebilirsiniz.
Şimdi sorabilirsiniz:"Madem User
objemiz zaten aksiyondan erişilebilir durumda, peki neden UserManager
'a çağrı yapmamız gerekiyor". Burada bulunan User
objesinin içerisinde çok basit veriler tutulur.UserManager
ise bu kullanıcıya ait tim bilgilerin veri tabanından getirilmesini sağlar.
currentUser
değeri hiç bir zaman null olmamalıdır. Zaten daha önce [Authorize]
ile kontrolörü ile giriş yapılmadan kullanılamayacağını belirtmiştiniz. Fakat yine de eğer kullanıcı giriş yapmadıysa veya her hangi bir şekilde o an bir problem olduysa onu giriş sayfasına yönlendirmek iyi bir pratiktir. Bunun için Challenge()
metodunu kullanabilirsiniz.
Artık ApplicationUser
parametresini GetIncompleteItemsAsync
'e gönderdiğinize göre, ITodoItemService
arayüzünde de değişiklik yapmalısınız.
Services/ITodoItemService.cs
Sıradaki işlem veri tabanını güncelleyerek sadece giriş yapan kullanıcıya has verileri getirmektir.
Veri tabanını güncelleme
TodoItem
modeline yeni bir özellik ekleyerek kullanıcıların bilgilerinin tutulmasını sağlamalısınız.
Tabi şu anda sadece modelde değişiklik yaptınız ve bunu henüz uygulamadınız. Bundan dolayı daha önce yaptığımız gibi göç ettirmeniz gerekmekte. Bunun için terminalde veya komut satırında dotnet ef
komutunu kullanarak aşağıdaki işlemi yapın.
Bu yeni bir göç oluşturarak bunun adını AddItemOwner
verir. Modelde yaptığımız değişiklikler burada da görülebilir.
Eğer SQLite kullanıyorsanız bu göç'ü otomatik yapamazsınız. Bunun için Migration Oluşturma bölümüne bakabilirsiniz. Tekrar
dotnet ef
komutu ile bu göçü uygulayabilirsiniz.
Servis sınıfını güncelleme
Veri tabanı ve veri tabanı konteksi güncellendi, artık TodoItemService
içerisinde bulunan GetIncompleteItemsAsync
metodunu değiştirebilir ve Where
sorgusu ekleyebilirsiniz.
Services/TodoItemService.cs
Yeni bir kullanıcı oluşturur ve giriş yaparsanız, yapılacaklar listesini boş göreceksiniz. Malesef yeni bir yapılacak eklediğinizde de bu değişmeyecek, çünkü yeni yapılacak ekleme olayının içerisinde kullanıcı bilgilerini kaydetme işlemini yapmanız henüz.
Yeni Yapılacak Olayı Güncellemesi ve Tamamlandı Operasyonu
UserManager
kullanarak giriş yapmış kullanıcının bilgilerini AddItem
ve MarkDone
aksiyonları içerisine paslayabilirsiniz. Bunu daha önce Index
aksiyonunda yapmıştınız. Buradaki tek fark bu metodların kullanıcıyı eğer giriş yapmamışsa giriş ekranına yönlendirmek yerine 401 Unauthorized
döndürmesidir.
TodoController
içerisini aşağıdaki gibi güncelleyin.
İki serviste ApplicationUser
parametresini kabul etmeli. ITodoItemService
içerisini aşağıdaki gibi güncelleyin.
Son olarak TodoItemService
içerisinde bulunan servis metodunu güncelleyin. AddItemAsync
metodu için Owner
özelliğini yeti TodoItem
oluştururken ayarlayın.
MarkDoneAsync
metodu içerisinde kullanıcıyı kontrol etmelisiniz. Böylece sadece yapılacak ID'si ile güncelleme yapılamayacaktır.
Bunu da tamamladık. Bundan sonra her kullanıcı kendi adına yapılacak ekleyebilecek ve başkası bunu göremeyecek veya tamamlandı olarak belirtemeyecek.
Last updated