PHP Academy · Lektion

Gates: enkla behörighetskontroller

Definiera och utvärdera gates för logik kring användarbehörigheter.

Lektion 3 av 413 steg

Gates: enkla behörighetskontroller är en gratis lektion i PHP Academy på CoddyKit. Detta är lektion 3 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för PHP Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i PHP Academy innehåller totalt 4 lektioner.

Vad är Gates?

Laravel-Gates är closures som avgör om en användare har rätt att utföra en viss åtgärd. De är enkla, globala auktoriseringskontroller som inte är kopplade till en specifik modell.

Definiera en Gate

Definiera gates i App\Providers\AppServiceProvider eller i en separat AuthServiceProvider med hjälp av facaden Gate.

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

Kontrollera en Gate (tillåter/nekar)

Kontrollera gate-resultat med Gate::allows() eller Gate::denies().

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

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

authorize() i controllers

Anropa $this->authorize() inuti en controller — den kastar automatiskt AuthorizationException (403) vid ett misslyckande.

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

@can i Blade

Använd direktivet @can för att villkorligt visa gränssnitt baserat på gate-kontroller.

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

Gate::before

Återanropet before körs före alla andra gate-kontroller — användbart för att ge administratörer fullständig åtkomst.

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

Gate::after

after körs efter alla gate-kontroller. Ett returvärde som inte är null ersätter gate-resultatet.

Returnera svar

Gates kan returnera ett Response-objekt för anpassade felmeddelanden.

<?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()

Kontrollera en gate för en annan användare (inte den autentiserade användaren).

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

Gästanvändare

Som standard returnerar gates automatiskt false för oautentiserade användare. Ange användaren som nullable med en typdeklaration för att tillåta kontroller av gäster.

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

Gates kontra Policies

Gates är enkla closures för tillfälliga kontroller. Policies är klasser för modellbaserad auktorisering — använd policies när ni har flera åtgärder på samma modell.

Sammanfattning

Gates är globala closures för auktorisering. Definiera dem i en service provider. Kontrollera med Gate::allows(), $this->authorize() eller @can i Blade.

Snabb kontroll

Vilken metod i en controller kastar automatiskt 403 när en gate-kontroll misslyckas?

Gratis att börja

Lär dig PHP med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
49
Lektioner
195

Vanliga frågor

Är lektionen ”Gates: enkla behörighetskontroller” gratis?

Ja – hela texten till ”Gates: enkla behörighetskontroller” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i PHP Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i PHP Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Gates: enkla behörighetskontroller”?

Definiera och utvärdera gates för logik kring användarbehörigheter. Ni övar på PHP Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig PHP Academy?

Du behöver inga förkunskaper. Utbildningen i PHP Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”Gates: enkla behörighetskontroller”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här PHP Academy-lektionen?

Ja. Varje PHP Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Autentisering med Laravel Breeze
  2. Skydda routes med middleware
  3. Gates: enkla behörighetskontroller
  4. Policies: modellbaserad behörighetskontroll
← Tillbaka till PHP Academy