Mukautetut valtuutusvaatimukset
Rakentakaa mukautettuja vaatimuksia ja käsittelijöitä.
Mukautetut valtuutusvaatimukset on ilmainen C# Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu C# Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C# Academy-kurssilla on yhteensä 4 oppituntia.
Kun valmiit ominaisuudet eivät riitä
Kaikkia sääntöjä ei voi ilmaista RequireRole- tai RequireClaim-metodeilla – esimerkiksi ”iän on oltava vähintään 18 vuotta” tai ”käyttäjän on omistettava tämä resurssi”.
Tällöin kirjoitetaan mukautettu vaatimus ja käsittelijä.
// Rule: user must be older than a configurable minimum ageIAuthorizationRequirement
Vaatimus on merkintä, joka sisältää säännön tiedot. Se toteuttaa tyhjän IAuthorizationRequirement-rajapinnan.
public class MinimumAgeRequirement : IAuthorizationRequirement
{
public int MinimumAge { get; }
public MinimumAgeRequirement(int minimumAge) =>
MinimumAge = minimumAge;
}AuthorizationHandler
Käsittelijä sisältää logiikan. Johda se luokasta AuthorizationHandler<TRequirement> ja ohita HandleRequirementAsync-metodi.
public class MinimumAgeHandler
: AuthorizationHandler<MinimumAgeRequirement>
{
protected override Task HandleRequirementAsync(
AuthorizationHandlerContext context,
MinimumAgeRequirement requirement)
{
// logic goes here
return Task.CompletedTask;
}
}Vaatimuksen hyväksyminen
Tarkastele käsittelijässä käyttäjän claimeja. Jos sääntö täyttyy, kutsu context.Succeed(requirement)-metodia. Muussa tapauksessa palaa kutsumatta sitä.
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, ei Fail
On suositeltavaa kutsua Succeed-metodia, kun vaatimus täyttyy, ja olla tekemättä mitään muussa tapauksessa. Kutsu context.Fail()-metodia vain, kun haluat taata epäonnistumisen kaikista samaa vaatimusta käsittelevistä muista käsittelijöistä riippumatta.
// Soft: let other handlers also try
if (ok) context.Succeed(requirement);
// Hard: force failure no matter what
if (blocked) context.Fail();Käsittelijän rekisteröiminen
Rekisteröi käsittelijät DI:hin tyypillä IAuthorizationHandler. Ne ovat yleensä singleton-instansseja, paitsi jos ne riippuvat scopetuista palveluista.
builder.Services.AddSingleton<
IAuthorizationHandler, MinimumAgeHandler>();Liittäminen käytäntöön
Lisää vaatimus nimettyyn käytäntöön AddRequirements-metodilla (tai Requirements.Add-metodilla). Käsittelijä yhdistetään tyyppinsä perusteella automaattisesti.
builder.Services.AddAuthorization(options =>
{
options.AddPolicy("AtLeast18", policy =>
policy.AddRequirements(new MinimumAgeRequirement(18)));
});Käytännön käyttäminen
Käytä sitä kuten mitä tahansa muuta nimettyä käytäntöä.
[Authorize(Policy = "AtLeast18")]
[HttpGet("age-restricted")]
public IActionResult Restricted() => Ok();Resurssiin perustuva valtuutus
Kun valtuutus on kohdistettava tiettyyn ilmentymään (esimerkiksi ”vain asiakirjan omistaja voi muokata sitä”), käytä resurssin sisältävää ylikuormitettua versiota. Resurssi välitetään käsittelijän kontekstiin.
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;
}
}IAuthorizationServicen kutsuminen
Resurssiin perustuvat tarkistukset suoritetaan imperatiivisesti toiminnon sisällä injektoidun IAuthorizationService-palvelun avulla.
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);
}Useita käsittelijöitä vaatimusta kohden
Vaatimuksella voi olla useita käsittelijöitä. Jos yksikin käsittelijä onnistuu, vaatimus täyttyy. Näin TAI-ehdot voidaan mallintaa selkeästi, ellei jokin käsittelijä kutsu Fail-metodia.
// e.g. allow if owner OR if admin role
services.AddSingleton<IAuthorizationHandler, OwnerHandler>();
services.AddSingleton<IAuthorizationHandler, AdminOverrideHandler>();Pikatesti
Testaa, miten hyvin ymmärrät käsittelijöitä.
Kertaus
Rakensit mukautetun valtuutuksen:
IAuthorizationRequirementsisältää säännön tiedot.AuthorizationHandler<T>sisältää logiikan ja kutsuuSucceed-metodia.- Rekisteröi käsittelijä tyypillä
IAuthorizationHandlerja liitä vaatimus käytäntöön. - Resurssiin perustuvat käsittelijät ja
IAuthorizationServicevaltuuttavat tiettyjen ilmentymien käytön.
Tähän päättyy valtuutusta käsittelevä kurssi.
Opi C# tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 93
- Oppitunnit
- 346
Usein kysytyt kysymykset
Onko oppitunti ”Mukautetut valtuutusvaatimukset” ilmainen?
Kyllä – oppitunnin ”Mukautetut valtuutusvaatimukset” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko C# Academy-kurssin, päivitä CoddyKit PROhon. C# Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Mukautetut valtuutusvaatimukset”?
Rakentakaa mukautettuja vaatimuksia ja käsittelijöitä. Harjoittelet C# Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni C# Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin C# Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Mukautetut valtuutusvaatimukset”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä C# Academy-oppitunnilla?
Kyllä. Jokainen C# Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Roolipohjainen valtuutus
- Claim-pohjainen valtuutus
- Käytäntöihin perustuva valtuutus
- Mukautetut valtuutusvaatimukset