0Pricing
C# Academy · Ders

Özel Yetkilendirme Gereksinimleri

Özel gereksinimler ve işleyiciler oluşturun.

Özel Yetkilendirme Gereksinimleri, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 4 dersten oluşur.

Yerleşik Özellikler Yeterli Olmadığında

Bazı kurallar RequireRole veya RequireClaim ile ifade edilemez; örneğin "en az 18 yaşında olmalı" veya "bu kaynağın sahibi olmalı".

Bu kurallar için özel bir gereksinim ve bir işleyici yazarsınız.

// Rule: user must be older than a configurable minimum age

IAuthorizationRequirement

Gereksinim, kuralın verilerini taşıyan bir işaretleyicidir. Boş IAuthorizationRequirement arayüzünü uygular.

public class MinimumAgeRequirement : IAuthorizationRequirement
{
    public int MinimumAge { get; }
    public MinimumAgeRequirement(int minimumAge) =>
        MinimumAge = minimumAge;
}

AuthorizationHandler

İşleyici mantığı içerir. AuthorizationHandler<TRequirement> sınıfından türetin ve HandleRequirementAsync yöntemini geçersiz kılın.

public class MinimumAgeHandler
    : AuthorizationHandler<MinimumAgeRequirement>
{
    protected override Task HandleRequirementAsync(
        AuthorizationHandlerContext context,
        MinimumAgeRequirement requirement)
    {
        // logic goes here
        return Task.CompletedTask;
    }
}

Gereksinimi Başarılı Kılma

İşleyicinin içinde kullanıcının claims bilgilerini inceleyin. Kural karşılanıyorsa context.Succeed(requirement) çağrısını yapın. Karşılanmıyorsa bu çağrıyı yapmadan dönün.

var dobClaim = context.User.FindFirst("birthdate");
if (dobClaim is null) return Task.CompletedTask;

var dob = DateTime.Parse(dobClaim.Value);
int age = DateTime.UtcNow.Year - dob.Year;
if (dob > DateTime.UtcNow.AddYears(-age)) age--;

if (age >= requirement.MinimumAge)
    context.Succeed(requirement);

return Task.CompletedTask;

Succeed Kullan, Fail Kullanma

Gereksinim karşılandığında Succeed çağrısını yapmayı, aksi durumda ise hiçbir şey yapmamayı tercih edin. Yalnızca aynı gereksinim için çalışan diğer işleyicilerden bağımsız olarak başarısızlığı garanti etmek istediğinizde context.Fail() çağrısını yapın.

// Soft: let other handlers also try
if (ok) context.Succeed(requirement);

// Hard: force failure no matter what
if (blocked) context.Fail();

İşleyiciyi Kaydetme

İşleyicileri DI içinde IAuthorizationHandler olarak kaydedin. Kapsamı belirli hizmetlere bağlı olmadıkları sürece genellikle tekil örnek olarak kullanılırlar.

builder.Services.AddSingleton<
    IAuthorizationHandler, MinimumAgeHandler>();

Bir İlkeye Bağlama

AddRequirements (veya Requirements.Add) kullanarak gereksinimi adlandırılmış bir ilkeye ekleyin. İşleyici türle otomatik olarak eşleştirilir.

builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("AtLeast18", policy =>
        policy.AddRequirements(new MinimumAgeRequirement(18)));
});

İlkeyi Kullanma

Bu ilkeyi diğer adlandırılmış ilkeler gibi uygulayın.

[Authorize(Policy = "AtLeast18")]
[HttpGet("age-restricted")]
public IActionResult Restricted() => Ok();

Kaynak Tabanlı Yetkilendirme

Belirli bir örneğe karşı yetkilendirme yapmak için (örneğin, "yalnızca belgenin sahibi düzenleyebilir") kaynak parametreli sürümü kullanın. Kaynak, işleyici bağlamına aktarılır.

public class OwnerHandler
    : AuthorizationHandler<OwnerRequirement, Document>
{
    protected override Task HandleRequirementAsync(
        AuthorizationHandlerContext context,
        OwnerRequirement requirement,
        Document resource)
    {
        var userId = context.User.FindFirstValue(
            ClaimTypes.NameIdentifier);
        if (resource.OwnerId.ToString() == userId)
            context.Succeed(requirement);
        return Task.CompletedTask;
    }
}

IAuthorizationService Çağırma

Kaynak tabanlı denetimler, eklenen IAuthorizationService aracılığıyla bir eylemin içinde emirsel olarak çalıştırılır.

public async Task<IActionResult> Edit(int id)
{
    var doc = await _db.Documents.FindAsync(id);
    var result = await _authz.AuthorizeAsync(
        User, doc, "DocumentOwner");
    if (!result.Succeeded) return Forbid();
    return Ok(doc);
}

Gereksinim Başına Birden Çok İşleyici

Bir gereksinimin birden çok işleyicisi olabilir; herhangi bir işleyici başarılı olursa gereksinim karşılanır. Bu, bir işleyici Fail çağrısı yapmadığı sürece OR koşullarını temiz biçimde modeller.

// e.g. allow if owner OR if admin role
services.AddSingleton<IAuthorizationHandler, OwnerHandler>();
services.AddSingleton<IAuthorizationHandler, AdminOverrideHandler>();

Hızlı Kontrol

İşleyiciler hakkındaki anlayışınızı sınayın.

Özet

Özel yetkilendirme oluşturdunuz:

  • Bir IAuthorizationRequirement, kuralın verilerini barındırır.
  • Bir AuthorizationHandler<T>, mantığı içerir ve Succeed çağrısını yapar.
  • İşleyiciyi IAuthorizationHandler olarak kaydedin ve gereksinimi bir ilkeye ekleyin.
  • Kaynak tabanlı işleyiciler ve IAuthorizationService, belirli örnekler için yetkilendirme yapar.

Yetkilendirme kursu tamamlandı.

Sıkça Sorulan Sorular

“Özel Yetkilendirme Gereksinimleri” dersi ücretsiz mi?

Evet — “Özel Yetkilendirme Gereksinimleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 4 dersten oluşur.

“Özel Yetkilendirme Gereksinimleri” dersinde ne öğreneceğim?

Özel gereksinimler ve işleyiciler oluşturun. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C# Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Özel Yetkilendirme Gereksinimleri” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Role Dayalı Yetkilendirme
  2. Taleplere Dayalı Yetkilendirme
  3. İlkeye Dayalı Yetkilendirme
  4. Özel Yetkilendirme Gereksinimleri
← C# Academy Sayfasına Dön