I'm trying to implement scopes on the tokens Laravel Passport returns. Here is what I have so far.
app/Providers/AuthServiceProvider.php
use Laravel\Passport\Passport;
...
public function boot()
{
$this->registerPolicies();
Passport::tokensCan([
'do-anything' => 'Perform any actions',
...,
]);
}
app/Http/Middleware/CheckRole.php
public function handle($request, Closure $next)
{
$role = Role::find($request->user()->role_id);
if($role) {
switch ($role->name) {
case "admin":
$request->request->add([
'scope' => 'do-anything'
]);
return $next($request);
case "...":
...
}
}
return $next($request);
}
routes/api.php
Route::middleware(['auth:api', 'check-role'])->group(function() {
Route::get('/users', function() {
return User::all();
})->middleware(['scopes:do-anything']);
});
I keep on getting a 403 Error when ever I try to hit the /users endpoint from an authenticated user. The error message says, Invalid scope(s) provided. I have a feeling that my CheckRole middlware isn't sending the modified request values. What am I missing here?