Laravel Blade @can funktioniert nicht, aber in_array (auth :: user ()-> getAllpermissions ()) tut es
Posted: 12 Mar 2025, 09:38
Ich arbeite an einem Laravel 11-Projekt mit dem Laravel-Genehmigungspaket von Spatie für eine rollenbasierte Zugriffskontrolle.
Code: Select all
`@php
$userPermissions = Auth::user()->getAllPermissions()->pluck('name')- >toArray();
@endphp
@if(in_array('view_permission_categories', $userPermissions))
[*]
Permission Categories
@endif
@can('view_permission_categories')
[*]
Permission Categories
@endcan
< /code>
`< /p>
Das Problem:
Die Bedingung @if (in_array (...)) funktioniert wie erwartet, und der Link erscheint. in_array (auth :: user ()-> getAllpermissions ()-> pfluck ('name')-> toarray () funktioniert?
Wie kann ich debuggen, warum @can die Erlaubnis nicht erkennt? Probiert: < /p>
Überprüft, ob der Benutzer die Berechtigung hat:
dd(Auth::user()->can('view_permission_categories')); < /code> < /li>
< /ol>
2.Ensured-Rollen und -Remmulierungen werden geladen:
$ currentUser = auth :: user ()-> load ('roles.permission'); /> PHP Artisan Config: Clear
PHP Artisan Ansicht: Clear
PHP Artisan Route: Clear
PHP Artisan Erlaubnis: cache-reset`use Illuminate\Support\Facades\Gate;
public function boot()
{
Gate::define('view_permission_categories', function ($user) {
return $user->hasPermissionTo('view_permission_categories');
});
}
`