c# Web

Öğrencilere Ait Performans ve Uygulama Notlarının Girildiği Core Mvc Projesi Tasarlama6

Şimdi giriş kontrolü (authentication) ve yetkilendirme (authorization) işlemlerini yapacağız. Kullanıcılar ve roller zaten veritabanına eklendiğine göre, artık giriş işlemi ve sayfalara erişim kısıtlamalarını oluşturabiliriz.

Kullanıcı Girişi (Login)

Öncelikle AccountController oluşturup giriş işlemini gerçekleştirelim.

using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using SchoolManagement.Models;
using System.Threading.Tasks;

namespace SchoolManagement.Controllers
{
    public class AccountController : Controller
    {
        private readonly SignInManager<ApplicationUser> _signInManager;
        private readonly UserManager<ApplicationUser> _userManager;

        public AccountController(SignInManager<ApplicationUser> signInManager, UserManager<ApplicationUser> userManager)
        {
            _signInManager = signInManager;
            _userManager = userManager;
        }

        // Giriş Yapma
        [HttpGet]
        public IActionResult Login()
        {
            return View();
        }

        [HttpPost]
        public async Task<IActionResult> Login(LoginViewModel model)
        {
            if (ModelState.IsValid)
            {
                var user = await _userManager.FindByNameAsync(model.Username);
                if (user != null)
                {
                    var result = await _signInManager.PasswordSignInAsync(user, model.Password, false, false);
                    if (result.Succeeded)
                    {
                        // Rol kontrolü ve yönlendirme
                        if (await _userManager.IsInRoleAsync(user, "Admin"))
                        {
                            return RedirectToAction("Dashboard", "Admin");
                        }
                        else if (await _userManager.IsInRoleAsync(user, "Teacher"))
                        {
                            return RedirectToAction("Dashboard", "Teacher");
                        }
                        else if (await _userManager.IsInRoleAsync(user, "Student"))
                        {
                            return RedirectToAction("Dashboard", "Student");
                        }
                    }
                    else
                    {
                        ModelState.AddModelError(string.Empty, "Geçersiz giriş.");
                    }
                }
                else
                {
                    ModelState.AddModelError(string.Empty, "Kullanıcı bulunamadı.");
                }
            }
            return View(model);
        }

        // Çıkış Yapma
        public async Task<IActionResult> Logout()
        {
            await _signInManager.SignOutAsync();
            return RedirectToAction("Index", "Home");
        }

        public IActionResult AccessDenied()
        {
            return View();
        }
    }
}

Bu controller, kullanıcı girişini gerçekleştirir. Eğer giriş başarılıysa kullanıcı yetkili olduğu sayfata yönlendirilir.

Kullanıcı Giriş Sayfası (Login View)

@model SchoolManagement.Models.LoginViewModel

<h2>Giriş Yap</h2>

<form asp-action="Login" method="post">
    <div class="form-group">
        <label for="Username">Kullanıcı Adı</label>
        <input type="text" id="Username" name="Username" class="form-control" required />
    </div>
    <div class="form-group">
        <label for="Password">Şifre</label>
        <input type="password" id="Password" name="Password" class="form-control" required />
    </div>
    <button type="submit" class="btn btn-primary">Giriş Yap</button>
</form>

Kullanıcı Modeli (ViewModel)

using System.ComponentModel.DataAnnotations;

namespace SchoolManagement.Models
{
    public class LoginViewModel
    {
        [Required]
        public string Username { get; set; }
        [Required]
        [DataType(DataType.Password)]
        public string Password { get; set; }
        public bool RememberMe { get; set; }
    }
}

Yetkilendirme (Authorization)

Şimdi her rol için yetkilendirme işlemlerini yapacağız.

Admin Paneli (Sadece Admin Girebilir)

Controllers/Admin/AdminController.cs

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

namespace SchoolManagement.Controllers.Admin
{
    [Authorize(Roles = "Admin")]
    public class AdminController : Controller
    {
        public IActionResult Dashboard()
        {
            return View();
        }
    }
}

Öğretmen Paneli (Sadece Öğretmenler Girebilir)

Controllers/Teacher/TeacherController.cs

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

namespace SchoolManagement.Controllers.Teacher
{
    [Authorize(Roles = "Teacher")]
    public class TeacherController : Controller
    {
        public IActionResult Dashboard()
        {
            return View();
        }
    }
}

Öğrenci Paneli (Sadece Öğrenciler Girebilir)

Controllers/Student/StudentController.cs

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

namespace SchoolManagement.Controllers.Student
{
    [Authorize(Roles = "Student")]
    public class StudentController : Controller
    {
        public IActionResult Dashboard()
        {
            return View();
        }
    }
}

Yetkisiz Erişim Sayfası

Eğer bir kullanıcı yetkisi olmayan bir sayfaya erişmeye çalışırsa, AccessDenied sayfasına yönlendirilmesini sağlayalım.

Controllers/AccountController.cs (Güncelle)

public IActionResult AccessDenied()
{
    return View();
}

Views/Account/AccessDenied.cshtml

<h2>Yetkisiz Erişim</h2>
<p>Bu sayfaya erişme yetkiniz bulunmamaktadır.</p>
<a href="/">Ana Sayfa'ya Dön</a>

Yetkisiz erişimde bu sayfa gösterilecektir.

Yetkilendirme Kurallarının Etkinleştirilmesi

Son olarak Program.cs dosyasında yetkilendirme yapılandırmasını yapalım.

app.UseAuthentication();
app.UseAuthorization();

app.UseStatusCodePagesWithRedirects("/Account/AccessDenied");

Bu kod, yetkisiz kullanıcıların AccessDenied sayfasına yönlendirilmesini sağlar.


İlgili Makaleler
Web Tabanlı Uygulama Geliştirme Dersi İkinci Dönem İkinci Yazılı Çalışma Soruları
2020 TYT Matematik Ortakatlı Kuralıyla İlgili Sorunun Çözümünü c# Diliyle Web Form Sayfasında Kodlama
Core Mvc Projesinde SqlServer Kullanarak Üye Takibi Yapan Web Projesini Tasarlama1
Web Tabanlı Uygulama Geliştirme Dersi İkinci Dönem Birinci Yazılı Çalışma Soruları
Visual Studio 2022 Programında Asp.Net Web Application Şablonu Görünmüyor Hatasını Düzeltme
Core Mvc Projesinde Tuple Nesneleri Post Etme ve Yakalama İşlemleri
Seri Port Yardımıyla Arduino Devresine Bağlanıp Ledleri Asp.Net Web Uygulamasından Yakıp Söndürme
Sitenin Alexa Dünya Sıralamasını Kodlarla Öğrenme
Personele Ait Boy ve Kilo Bilgilerine Göre İdeal Kiloyu Bulan Uygulamayı Asp.Net İle Yapınız
Core Mvc Projesinde SqlServer Kullanarak Üye Takibi Yapan Web Projesini Tasarlama4
Bir Otobüs Firmasına Ait Bilet Satış İşlemlerini Class(Sınıf) Tanımlayarak Yapan c# Form Uygulaması
Asp.Net Uygulamasında Manual Olarak JSON Oluşturma
Asp.Net Uygulamalarında Modal PopUp Oluşturma
Web Uygulamalarında SqLite Kullanımı
Asp.Net Uygulamalarında DataList (Veri Listeleme) Kontrolü
Core Mvc Projesinde SqlServer Kullanarak Üye Takibi Yapan Web Projesini Tasarlama2
C# Uygulamasında Miladi Takvimi Hicri Takvime, Hicri Takvimi Miladi Takvime Dönüştürme
2022 TYT Matematik Onbirinci Sorunun Çözümünü c# Diliyle Web Form Sayfasında Kodlama
Core Mvc Projesinde SqlServer Kullanarak Üye Takibi Yapan Web Projesini Tasarlama3
RadioButton ile Cinsiyet Bilgisini Alan Asp.Net c# Uygulaması

Yorum Ekle
   
Kötü İyi