0Pricing
C# Academy · Pelajaran

Requirement Otorisasi Kustom

Bangun requirement dan handler kustom.

Requirement Otorisasi Kustom adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C# Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C# Academy mencakup 4 pelajaran total.

Saat Fitur Bawaan Tidak Cukup

Beberapa aturan tidak dapat dinyatakan dengan RequireRole atau RequireClaim — misalnya, "harus berusia minimal 18 tahun" atau "harus memiliki sumber daya ini".

Untuk aturan tersebut, Anda menulis persyaratan khusus beserta penangan.

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

IAuthorizationRequirement

Persyaratan adalah penanda yang membawa data aturan. Persyaratan ini mengimplementasikan antarmuka IAuthorizationRequirement yang kosong.

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

AuthorizationHandler

Penangan berisi logika. Turunkan dari AuthorizationHandler<TRequirement> dan timpa HandleRequirementAsync.

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

Memenuhi Persyaratan

Di dalam penangan, periksa klaim pengguna. Jika aturan terpenuhi, panggil context.Succeed(requirement). Jika tidak, cukup kembalikan tanpa memanggilnya.

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;

Panggil Succeed, Bukan Fail

Sebaiknya panggil Succeed ketika persyaratan terpenuhi dan tidak melakukan apa pun jika tidak terpenuhi. Panggil context.Fail() hanya jika Anda ingin menjamin kegagalan terlepas dari penangan lain untuk persyaratan yang sama.

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

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

Mendaftarkan Penangan

Daftarkan penangan di DI sebagai IAuthorizationHandler. Biasanya penangan berupa layanan tunggal, kecuali bergantung pada layanan bercakupan.

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

Melampirkan ke Kebijakan

Tambahkan persyaratan ke kebijakan bernama menggunakan AddRequirements (atau Requirements.Add). Penangan dicocokkan berdasarkan tipe secara otomatis.

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

Menggunakan Kebijakan

Terapkan kebijakan ini seperti kebijakan bernama lainnya.

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

Otorisasi Berbasis Sumber Daya

Untuk melakukan otorisasi terhadap instans tertentu (misalnya, "hanya pemilik dokumen yang boleh mengedit"), gunakan bentuk pemanggilan yang menerima sumber daya. Sumber daya tersebut diteruskan ke konteks penangan.

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;
    }
}

Memanggil IAuthorizationService

Pemeriksaan berbasis sumber daya dijalankan secara imperatif di dalam suatu aksi melalui IAuthorizationService yang diinjeksi.

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);
}

Beberapa Penangan untuk Satu Persyaratan

Sebuah persyaratan dapat memiliki beberapa penangan; jika salah satu penangan berhasil, persyaratan terpenuhi. Hal ini memodelkan kondisi OR dengan rapi (kecuali ada penangan yang memanggil Fail).

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

Pemeriksaan Singkat

Uji pemahaman Anda tentang penangan.

Ringkasan

Anda telah membangun otorisasi khusus:

  • IAuthorizationRequirement menyimpan data aturan.
  • AuthorizationHandler<T> berisi logika dan memanggil Succeed.
  • Daftarkan penangan sebagai IAuthorizationHandler dan lampirkan persyaratan ke sebuah kebijakan.
  • Penangan berbasis sumber daya dan IAuthorizationService mengotorisasi instans tertentu.

Dengan demikian, kursus otorisasi ini selesai.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Requirement Otorisasi Kustom” gratis?

Ya — teks lengkap “Requirement Otorisasi Kustom” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C# Academy, upgrade ke CoddyKit PRO. Kursus C# Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Requirement Otorisasi Kustom”?

Bangun requirement dan handler kustom. Kamu berlatih C# Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C# Academy?

Tidak diperlukan pengalaman sebelumnya. C# Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Requirement Otorisasi Kustom” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C# Academy ini?

Ya. Setiap pelajaran C# Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Otorisasi Berbasis Peran
  2. Otorisasi Berbasis Klaim
  3. Otorisasi Berbasis Kebijakan
  4. Requirement Otorisasi Kustom
← Kembali ke C# Academy