Akademi C# · Pelajaran

Keperluan Kebenaran Tersuai

Bina keperluan dan pengendali tersuai.

Pelajaran 4 daripada 413 langkah

Keperluan Kebenaran Tersuai ialah pelajaran Akademi C# percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Akademi C#, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Akademi C# merangkumi sejumlah 4 pelajaran.

Apabila Fungsi Terbina Dalam Tidak Mencukupi

Sesetengah peraturan tidak dapat dinyatakan dengan RequireRole atau RequireClaim - contohnya, "umur mestilah sekurang-kurangnya 18 tahun" atau "mestilah memiliki sumber ini".

Untuk perkara ini, Anda menulis keperluan bersama pengendali tersuai.

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

IAuthorizationRequirement

Keperluan ialah penanda yang membawa data peraturan tersebut. Keperluan ini melaksanakan antara muka kosong IAuthorizationRequirement.

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

AuthorizationHandler

Pengendali mengandungi logik. Terbitkan daripada AuthorizationHandler<TRequirement> dan gantikan HandleRequirementAsync.

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

Meluluskan Keperluan

Dalam pengendali, periksa tuntutan pengguna. Jika peraturan itu dipenuhi, panggil context.Succeed(requirement). Jika tidak, kembali sahaja 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;

Succeed, Bukan Fail

Utamakan panggilan Succeed apabila keperluan dipenuhi dan jangan lakukan apa-apa jika tidak dipenuhi. Panggil context.Fail() hanya apabila Anda mahu menjamin kegagalan tanpa mengira pengendali lain bagi keperluan yang sama.

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

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

Mendaftarkan Pengendali

Daftarkan pengendali dalam DI sebagai IAuthorizationHandler. Pengendali biasanya berupa instans tunggal, kecuali jika bergantung pada perkhidmatan berskop.

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

Melampirkan pada Dasar

Tambahkan keperluan pada dasar bernama menggunakan AddRequirements (atau Requirements.Add). Pengendali dipadankan mengikut jenis secara automatik.

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

Menggunakan Dasar

Gunakannya seperti mana-mana dasar bernama yang lain.

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

Kebenaran Berasaskan Sumber

Untuk memberikan kebenaran berdasarkan tika tertentu (contohnya, "hanya pemilik dokumen boleh mengedit"), gunakan lebihan beban yang menerima sumber. Sumber itu dihantar ke konteks pengendali.

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

Semakan berasaskan sumber dijalankan secara imperatif dalam tindakan melalui IAuthorizationService yang disuntik.

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 Pengendali bagi Satu Keperluan

Satu keperluan boleh mempunyai beberapa pengendali; jika mana-mana pengendali berjaya, keperluan itu dipenuhi. Ini memodelkan keadaan OR dengan kemas (kecuali pengendali memanggil Fail).

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

Semakan Pantas

Uji pemahaman Anda tentang pengendali.

Imbas Kembali

Anda membina kebenaran tersuai:

  • IAuthorizationRequirement menyimpan data peraturan.
  • AuthorizationHandler<T> mengandungi logik dan memanggil Succeed.
  • Daftarkan pengendali sebagai IAuthorizationHandler dan lampirkan keperluan pada dasar.
  • Pengendali berasaskan sumber dan IAuthorizationService memberikan kebenaran untuk tika tertentu.

Kursus kebenaran ini selesai.

Percuma untuk bermula

Pelajari C# dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
93
Pelajaran
346

Soalan Lazim

Adakah pelajaran “Keperluan Kebenaran Tersuai” percuma?

Ya — teks penuh “Keperluan Kebenaran Tersuai” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Akademi C#, tingkat taraf kepada CoddyKit PRO. Kursus Akademi C# merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Keperluan Kebenaran Tersuai”?

Bina keperluan dan pengendali tersuai. Anda berlatih Akademi C# menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Akademi C#?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Akademi C# di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.

Berapa lamakah pelajaran “Keperluan Kebenaran Tersuai” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Akademi C# ini?

Ya. Setiap pelajaran Akademi C# menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Kebenaran Berasaskan Peranan
  2. Kebenaran Berasaskan Tuntutan
  3. Kebenaran Berasaskan Dasar
  4. Keperluan Kebenaran Tersuai
← Kembali ke Akademi C#