PHP Academy · Oppitunti

Gatet: yksinkertaiset valtuutustarkistukset

Määritelkää ja arvioikaa gate-sääntöjä käyttäjän toimintojen käyttöoikeuslogiikkaa varten.

Oppitunti 3/413 vaihetta

Gatet: yksinkertaiset valtuutustarkistukset on ilmainen PHP Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/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 PHP Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. PHP Academy-kurssilla on yhteensä 4 oppituntia.

Mitä Gatet ovat?

Laravelin Gatet ovat sulkeumia, jotka määrittävät, onko käyttäjällä oikeus suorittaa tietty toiminto. Ne ovat yksinkertaisia, yleisiä valtuutustarkistuksia, joita ei ole sidottu tiettyyn malliin.

Gaten määrittäminen

Määrittäkää gatet App\Providers\AppServiceProvider-palveluntarjoajassa tai erillisessä AuthServiceProviderissa käyttämällä Gate-julkisivua.

<?php
use Illuminate\Support\Facades\Gate;

// In a service provider's boot() method:
Gate::define("delete-post", function (User $user, Post $post) {
    return $user->id === $post->user_id;
});

Gaten tarkistaminen (sallii/estää)

Tarkistakaa gaten tulos käyttämällä Gate::allows()- tai Gate::denies()-metodia.

<?php
if (Gate::allows("delete-post", $post)) {
    $post->delete();
}

if (Gate::denies("delete-post", $post)) {
    abort(403);
}

authorize() ohjaimissa

Kutsukaa ohjaimen sisällä $this->authorize()-metodia — se heittää epäonnistuessaan automaattisesti AuthorizationException-poikkeuksen (403).

<?php
public function destroy(Post $post): RedirectResponse
{
    $this->authorize("delete-post", $post);
    $post->delete();
    return redirect()->route("posts.index");
}

@can Bladessa

Käyttäkää @can-direktiiviä käyttöliittymän ehdolliseen näyttämiseen gaten tarkistuksen perusteella.

@can('delete-post', $post)
    <form method="POST" action="/posts/{{ $post->id }}">
        @csrf @method('DELETE')
        <button>Delete</button>
    </form>
@endcan

Gate::before

before-takaisinkutsu suoritetaan ennen kaikkia muita gaten tarkistuksia — se on hyödyllinen järjestelmänvalvojille annettavan rajoittamattoman käyttöoikeuden myöntämiseen.

<?php
Gate::before(function (User $user, string $ability) {
    if ($user->isAdmin()) return true; // skip further checks
});

Gate::after

after suoritetaan kaikkien gaten tarkistusten jälkeen. Muu kuin null-arvoinen palautusarvo ohittaa gaten tuloksen.

Vastausten palauttaminen

Gatet voivat palauttaa Response-olion mukautettuja virheilmoituksia varten.

<?php
Gate::define("publish-post", function (User $user, Post $post) {
    return $user->isEditor()
        ? Response::allow()
        : Response::deny("You must be an editor to publish.");
});

forUser()

Tarkistakaa gate toisen käyttäjän osalta nykyisen todennetun käyttäjän sijaan.

<?php
if (Gate::forUser($otherUser)->allows("delete-post", $post)) {
    // ...
}

Vieraskäyttäjät

Oletusarvoisesti gatet palauttavat todentamattomille käyttäjille automaattisesti arvon false. Määritelkää käyttäjätyyppi nullable-tyyppiseksi, jotta vieraskäyttäjien tarkistaminen on mahdollista.

<?php
Gate::define("view-post", function (?User $user, Post $post) {
    return $post->is_published || $user?->id === $post->user_id;
});

Gatet ja policiet

Gatet ovat yksinkertaisia sulkeumia tapauskohtaisiin tarkistuksiin. Policiet ovat luokkia mallipohjaiseen valtuutukseen — käyttäkää policy-luokkia, kun samalla mallilla on useita toimintoja.

Yhteenveto

Gatet ovat yleisiä valtuutuksen sulkeumia. Määritelkää ne palveluntarjoajassa. Tarkistakaa ne Gate::allows()-metodilla, $this->authorize()-metodilla tai Bladessa @can-direktiivillä.

Pikakysymys

Mikä ohjaimen metodi heittää epäonnistuessaan automaattisesti 403-virheen?

Aloita maksutta

Opi PHP 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
49
Oppitunnit
195

Usein kysytyt kysymykset

Onko oppitunti ”Gatet: yksinkertaiset valtuutustarkistukset” ilmainen?

Kyllä – oppitunnin ”Gatet: yksinkertaiset valtuutustarkistukset” 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 PHP Academy-kurssin, päivitä CoddyKit PROhon. PHP Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Gatet: yksinkertaiset valtuutustarkistukset”?

Määritelkää ja arvioikaa gate-sääntöjä käyttäjän toimintojen käyttöoikeuslogiikkaa varten. Harjoittelet PHP Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni PHP Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin PHP Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Gatet: yksinkertaiset valtuutustarkistukset”-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ä PHP Academy-oppitunnilla?

Kyllä. Jokainen PHP 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

  1. Todennus Laravel Breezellä
  2. Reittien suojaaminen middlewarella
  3. Gatet: yksinkertaiset valtuutustarkistukset
  4. Policiet: mallipohjainen valtuutus
← Takaisin: PHP Academy