Kullanıcılar ile ilgili sayfa işlemlerimizi bitirdik. Gelelim en başta dediğim olaya benim projemde iki rol tipinde kullanıcı olacak, bunlardan biri yönetici yani admin bir diğeri ise normal kullanıcı yani müşterilerim. Projemde Kullanıcılar ve Bakım Tipleri sayfalarına erişimi sağlayacak rol sadece admin rolü için geçerli olacak.
Dersin detaylı anlatımı ve detaylı kod takibi için video eğitime göz atınız.
Projelerde authentication ve authorization önemlidir. Bir web sitesine kullanıcı adınız ve şifrenizle giriş yapmış olmanız otantike yani otorum açmış olmanız anlamına gelir, authentication sağlanmış olur. Siz ilgili web sitesine authentication yaptıktan sonra artık authorization devreye girer yani yetkilendirme devreye girer. Burada da sizin yetkinize yani rolünüze göre siteyi kullanırsınız. Bazı alanlara erişebilir bazı alanlara erişemeyebilirsiniz.
Projemizde de kullanıcı yani müşteri siteye giriş yapınca yani authentication işlemi sağlanıca bakım tipleri ve kullanıcılar sayfasına erişemeyecek. Buralara sadece admin erişebilecek. ASP.Net Core’da authorization tanımlama işlemimiz çok basit.
Biz daha önceden utility klasörü altında StatikRoller.cs adında bir class oluşturup bunun içinde rollerimizi tanımlamıştık. Admin ve Musteri şeklinde idi.
Kodlar ve açıklamalar:
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace GursoyCNCBakim.Utility { public static class StatikRoller { public const string AdminKullanici = "Admin"; public const string MusteriKullanici = "Musteri"; public const int KullaniciSayfalamaSayfaBoyutu = 5; } }
Peki şimdi ne yapacağız, öncelikle Bakım Tipleri klasörü altında yer alan her razor page için page model sayfasına gideceğiz ve aşağıdaki kodu ekleyeceğiz.
[Authorize(Roles = StatikRoller.AdminKullanici)]
Bu kodu BakimTipleri altında yer alan Create.cshtml.cs, Delete.cshtml.cs, Details.cshtml.cs, Edit.cshtml.cs ve Index.cshtml.cs pagemodel sayfalarımda namespace’in hemen altında ekliyorum.
Sadece bir tanesini örnekleyeyim, diğerlerini sizler ekleyin.
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using GursoyCNCBakim.Data; using GursoyCNCBakim.Models; using GursoyCNCBakim.Utility; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; namespace GursoyCNCBakim.Pages.BakimTipleri { [Authorize(Roles = StatikRoller.AdminKullanici)] public class CreateModel : PageModel { private readonly ApplicationDbContext _db; [BindProperty] public BakimTipi BakimTipi { get; set; } public CreateModel(ApplicationDbContext db) { _db = db; } public IActionResult OnGet() { return Page(); } public async Task< IActionResult > OnPostAsync() { if (!ModelState.IsValid) { return Page(); } _db.BakimTipi.Add(BakimTipi); await _db.SaveChangesAsync(); return RedirectToPage("Index"); } } }
Daha sonra Kullanicilar klasörü altında yer alan her razor page için page model sayfasına gideceğiz ve aynı şekilde kodu ekleyeceğiz.
Bu kodu Kullanicilar altında yer alan Delete.cshtml.cs, Edit.cshtml.cs ve Index.cshtml.cs pagemodel sayfalarımda namespace’in hemen altında ekliyorum. Üsteki gibi yani.
Şimdi benim kullanıcım eğer admin ise navbar’da Bakım Tipleri ve Kullanıcılar linki görünmeli ama normal müşteri girdi ise bu linkler görünmemeli. Bunu da _Layout üzerinde yapmamız lazım.
_Layout.cshtml’i açıyorum ve öncelikle using diyerek ilgili rollerimin tanımlandığı klasör tanımlamasını yapıyorum. Akabinde Bakım Tipleri ve Kullanıcıları listelediğim linkleri bir if şartına alıyorum. Kodlarım şu şekilde:
@using GursoyCNCBakim.Utility < !DOCTYPE html> < html lang="en"> < head>@ViewData["Title"] - Gursoy CNC Bakim Teknik Servis < body class="search-background"> @RenderBody() @RenderSection("Scripts", required: false) < /body> < /html>
Şimdilik bu kadar, detaylı bilgi için ve kodları daha detaylı takip için video eğitime de mutlaka bakınız, bir sonraki derste görüşmek üzere.