Şimdi veritabanı ve kimlik doğrulama (authentication & authorization) sistemini kurarak devam edelim. Böylece yönetici, öğretmen ve öğrenci rolleri olan bir sistem oluşturabiliriz.
Veritabanı ve Kimlik Doğrulama Kurulumu
Projeye ASP.NET Identity ve Entity Framework Core ekleyerek kullanıcı yönetimi ve roller oluşturacağız.
Entity Framework Core ve Identity Paketlerini Yükleyelim
Visual Studio'da Tools > NuGet Package Manager > Manage NuGet Packages for Solution seçeneğinden şu paketleri yükleyelim:
Gerekli NuGet Paketleri
Komut satırından da yükleyebilirsin:
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.Tools
Veritabanı Bağlantısını Ayarlayalım
appsettings.json dosyasına veritabanı bağlantısını ekleyelim:
"ConnectionStrings": {
"DefaultConnection": "Server=aaa;Database=hizmetler;User ID=bbb;Password=ccc;Trusted_Connection=False;Encrypt=False;"
},
Veritabanı Modellerini ve Kimlik Sistemini Tanımlama
Models klasörü içinde ApplicationUser.cs adında bir dosya oluşturalım ve ASP.NET Identity ile genişletelim:
using Microsoft.AspNetCore.Identity;
namespace SchoolManagement.Models
{
public class ApplicationUser : IdentityUser
{
public string? FullName { get; set; }
}
}
DbContext Sınıfını Tanımlama
Projeye Data isminide bir klasör ekleyelim. Data klasörü içinde ApplicationDbContext.cs adında bir dosya oluşturup veritabanı yapılandırmasını yapalım:
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using SchoolManagement.Models;
namespace SchoolManagement.Data
{
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
// Sabit GUID değerleri
string adminRoleId = "b9d7cb1f-1b53-4e97-b8b9-2f0db9d29f20"; // Sabit GUID
string teacherRoleId = "e78b3f3e-2336-4236-b66f-cd14d5b9d97e"; // Sabit GUID
string studentRoleId = "a76c7d1d-9b59-47c9-b913-0352672e7e55"; // Sabit GUID
builder.Entity<IdentityRole>().HasData(
new IdentityRole { Id = adminRoleId, Name = "Admin", NormalizedName = "ADMIN" },
new IdentityRole { Id = teacherRoleId, Name = "Teacher", NormalizedName = "TEACHER" },
new IdentityRole { Id = studentRoleId, Name = "Student", NormalizedName = "STUDENT" }
);
}
}
}
Bağlantıyı Program.cs Dosyasında Yapılandırma
Program.cs dosyanızı şu şekilde güncelleyin:
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using SchoolManagement.Data;
using SchoolManagement.Models;
var builder = WebApplication.CreateBuilder(args);
// Veritabanı bağlantısını ekle
builder.Services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
// Kimlik doğrulama servisini ekle
builder.Services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
builder.Services.AddControllersWithViews();
var app = builder.Build();
// Kimlik doğrulama ve yetkilendirme işlemleri
app.UseAuthentication();
app.UseAuthorization();
app.UseDeveloperExceptionPage();
app.UseStatusCodePages();
app.UseDefaultFiles();
app.UseStaticFiles();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}"
);
app.Run();
Veritabanını Oluşturma
PMC'de aşağıdaki komutları çalıştırarak veritabanını oluşturun:
dotnet ef migrations add InitialCreate
dotnet ef database update
Bu işlem SchoolManagement veritabanını oluşturacak ve AspNetRoles, AspNetUsers gibi Identity tablolarını ekleyecektir. Ayrıca AspNetRoles tablosuna Admin, Teacher, Student rolleri eklenecektir.