ASP.NET Core Identity ve Role-Based / Policy-Based Yetkilendirme
ASP.NET Core Identity ve Role-Based / Policy-Based Yetkilendirme
Konunun Mimari Önemi ve Temel Çalışma Prensibleri
ASP.NET Core Identity, kullanıcı yönetimi ve yetkilendirme işlevlerini sağlayan güçlü bir framework’dür. Role-Based (RBAC) ve Policy-Based Yetkilendirme, modern web uygulamalarında kullanıcı haklarını ve erişim düzeylerini yönetmek için esen tekniklerdir.
Role-Based Yetkilendirme, rollerin temel birimlerini oluşturmaya ve bu rolleri kullanıcılarla ilişkilendirmeye odaklanır. Policy-Based Yetkilendirme ise daha esnek ve özelleştirilmiş yetkilendirme politikaları oluşturmanıza olanak tanır.
Kurumsal Projelerde Dikkat Edilmesi Gereken En İyi Pratikler (Best Practices)
- Rolleri ve İzinleri Yanıltıcı Olmayan Bir Şekilde Adlandırın: Rol adları, izin adları ve politika adları ne anlama geldiğini açıkça belirtmelidir.
- Autorization Attributes’ı Dikkatli Kullanın: [Authorize] attribute’ını doğru ve güvenilir bir şekilde kullanın, özellikle action veya controller düzeyinde.
- Yetkilendirme Politikalarını Tutarlı Bir Şekilde Yönetin: Politika tanımlarını tek bir yerde tutun ve sürekli olarak güncelleyin.
- Veritabanı Optimizasyonu: Kullanıcılar, roller ve izinlerle ilgili veritabanı sorgularını optimize edin ve gerektiğinde cache’lemeyi düşünün.
- Auditing ve Güvenlik: Kullanıcı yetkilendirme işlemlerini audit etmek ve gerektiğinde uyarılar ayarlamak önemlidir.
Gerçek Dünya Senaryolarına Uygun Kod Bloğu Örneği
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
public class AdminController : Controller
{
private readonly UserManager<IdentityUser> _userManager;
public AdminController(UserManager<IdentityUser> userManager)
{
_userManager = userManager;
}
[Authorize(Policy = "CanAccessAdminPanel")]
public IActionResult Index()
{
return View();
}
[HttpPost]
[Authorize(Policy = "CanCreateUser")]
public async Task CreateUser(string userName)
{
var user = new IdentityUser { UserName = userName };
var result = await _userManager.CreateAsync(user);
if (result.Succeeded)
{
return RedirectToAction("Index");
}
return View("Error");
}
}
Performans Optimizasyonu ve Olası Darboğazlar
Yetkilendirme mekanizmaları performans açısından etkileyebilir, bu nedenle optimizasyon stratejileri önemlidir:
- Politika ve Rol Tanımlarını Cache’lemeyi Düşün: Sık kullanılan politika ve rol tanımlarını bellek cache’lemek performansı artırabilir.
- Veritabanı Sorgularını Optimize Edin:> Yetkilendirme işlemi sırasında yapılan veritabanı sorgularını optimize ederek gecikmeleri azaltın.
- Custom Claim Providers Kullanın: Gerekli durumlarda, custom claim providers kullanarak yetkilendirme bilgilerini daha etkili bir şekilde sağlayabilirsiniz.
- Paralel İzin Kontrolleri: Çok sayıda rol veya politika kontrolü yapılacağı durumlarda, paralel izin kontrolü mekanizmalarını kullanmayı düşünebilirsiniz.





