Try passing array to ->middleware(), not two parameters:
Route::get('places/{place}', [PlaceController::class, 'edit'])
->middleware( [ 'auth:sanctum', 'can:edit,place' ] );
class PlacePolicy
{
public function edit(User $user, Place $place): bool
{
return true;
}
}
class PlaceController extends Controller
{
public function edit(Place $place): Place
{
return $place;
}
}
//api.php
Route::get('places/{place}', [PlaceController::class, 'edit'])->middleware('auth:sanctum', 'can:edit,place');
I get a 403 access error.
If I remove can:edit,place, everything works. Most likely the problem is that the authorization auth:sanctum passes, all is ok. But next middleware (can:edit,place) does not run, because $user is null =\
@JussiMannisto Big thanks for trying to help, dude. I found problem.
In my AppServiceProvider.php i returned true or false and next checks are not happened:
Gate::before(fn(User $user) => $user->hasRole(RoleEnum::OWNER));
I just fix it:
Gate::before(fn(User $user) => $user->hasRole(RoleEnum::OWNER) ? true : null);
I am happy :D
Please or to participate in this conversation.