Zoeken…


Invoering

Laravel biedt een eenvoudige manier om gebruikersacties voor specifieke bronnen te autoriseren. Met Autorisatie kunt u gebruikers selectief toegang geven tot bepaalde bronnen en toegang tot anderen weigeren. Laravel biedt een eenvoudige API voor het beheren van gebruikersautorisaties met behulp van Gates and Policies . Gates bieden een eenvoudige, op afsluiting gebaseerde benadering van autorisatie met behulp van AuthServiceProvider terwijl met Policies u autorisatielogica rondom modellen met behulp van klassen kunt organiseren.

Gates gebruiken

Gates zijn sluitingen die bepalen of een gebruiker een bepaalde actie op een resource mag uitvoeren. Gates worden meestal gedefinieerd in de opstartmethode van AuthServiceProvider en beknopt genoemd om aan te geven wat het doet. Een voorbeeld van een poort waarmee alleen premium-gebruikers bepaalde inhoud kunnen bekijken, ziet er zo uit:

Gate::define('view-content', function ($user, $content){
    return $user->isSubscribedTo($content->id);
});

Een Gate ontvangt altijd een gebruikersinstantie als het eerste argument, u hoeft dit niet door te geven wanneer u de gate gebruikt, en kan optioneel aanvullende argumenten ontvangen, zoals het betreffende welsprekende model.

Acties autoriseren met Gates

Als u het bovenstaande voorbeeld op een bladsjabloon wilt gebruiken om inhoud voor de gebruiker te verbergen, doet u meestal zoiets:

@can('view-content', $content)
 <! -- content here -->
@endcan

Om navigatie naar de inhoud volledig te voorkomen, kunt u het volgende doen in uw controller:

if(Gate::allows('view-content', $content)){
    /* user can view the content */
}

        OR

if(Gate::denies('view-content', $content)){
    /* user cannot view content */
}

Opmerking: u bent niet verplicht om de momenteel geverifieerde gebruiker aan deze methode door te geven, Laravel regelt dat voor u.

beleid

Beleid zijn klassen die u helpen autorisatielogica rond een modelresource te organiseren. In ons vorige voorbeeld hebben we misschien een ContentPolicy dat gebruikerstoegang tot het Content model beheert.

Om ContentPolicy te maken, biedt laravel een ambachtelijk commando. Ren gewoon

php artisan make:policy ContentPolicy

Hiermee wordt een lege beleidsklasse gemaakt en in de map app/Policies . Als de map niet bestaat, maakt Laravel deze en plaatst de klas erin.

Eenmaal gemaakt, moet beleid worden geregistreerd om Laravel te helpen weten welk beleid te gebruiken bij het autoriseren van acties op modellen. De AuthServiceProvider Laravel, die wordt geleverd met alle nieuwe Laravel-installaties, heeft een AuthServiceProvider die uw welsprekende modellen AuthServiceProvider aan hun autorisatiebeleid. Het enige dat u hoeft te doen, is de toewijzing aan de array toevoegen.

protected $policies = [
    Content::class => ContentPolicy::class,
 ];

Schrijfbeleid

Het schrijven van Policies volgt vrijwel hetzelfde patroon als het schrijven van Gates . De content-toegangspoort kan als een beleid als volgt worden herschreven:

function view($user, $content)
{
    return $user->isSubscribedTo($content->id);
}

Beleid kan meer methoden bevatten als nodig is om alle autorisatiezaken voor een model af te handelen.

Acties autoriseren met beleid

Via het gebruikersmodel

Het Laravel-gebruikersmodel bevat twee methoden die helpen bij autorisaties met behulp van Policies ; can en can't . Deze twee kunnen worden gebruikt om te bepalen of een gebruiker al dan niet autorisatie heeft voor een model.

Om te controleren of een gebruiker inhoud kan bekijken of niet, kunt u het volgende doen:

if($user->can('view', $content)){
    /* user can view content */
}

        OR

if($user->cant('view', $content)){
    /* user cannot view content */
}

Via Middleware

Route::get('/contents/{id}, function(Content $content){
    /* user can view content */
})->middleware('can:view,content');

Via controllers

Laravel biedt een helper-methode, authorize genaamd die de naam van het beleid en het bijbehorende model als argumenten gebruikt, en autoriseert de actie op basis van uw autorisatielogica of weigert de actie en gooit een AuthorizationException die de Laravel Exception-handler converteert naar een 403 HTTP response .

pubic function show($id)
{
    $content = Content::find($id);

    $this->authorize('view', $content);
        
    /* user can view content */
}


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow