ich ein Tutorial bin nach einer Zugriffsebene Beschränkung für die Herstellung:Laravel Middleware funktioniert nicht auf eine Ressource Route
https://gist.github.com/amochohan/8cb599ee5dc0af5f4246
ich in der Lage war, um es irgendwie funktioniert, aber es ist etwas, was ich brauche zum Laufen zu bringen, das ist nicht im Tutorial.
Vorausgesetzt, ich habe das Tutorial gefolgt. Ich habe Setup diese Ressource Route:
Route::group(['middleware' => ['auth', 'roles'], 'roles' => ['Administrator']], function()
{
Route::resource('changeschedule', 'ChangeScheduleController', ['only' => ['index'], 'except' => ['create']]);
});
Also, was ich wollte nur, um die roles
Middleware auf eine Ressource Route gelten, aber mit bestimmten Route in dieser Ressource nur sagen wir, ich will ich nur in der index
angewendet werden, so habe diese Route oben.
Wenn ich auf:
http://localhost/hrs/public/changeschedule
Es funktioniert gut und die Middleware roles
funktioniert gut. Aber warum das ist, wenn ich gehe:
http://localhost/hrs/public/changeschedule/create
Ich erhalte
NotFoundHttpException in RouteCollection.php line 161:
So habe ich ein nicht gefunden Streckenfehler. Warum das? Aber wenn ich
Route::group(['middleware' => ['auth', 'roles'], 'roles' => ['Administrator']], function()
{
Route::resource('changeschedule', 'ChangeScheduleController');
});
Dann funktioniert es gut, aber die Middleware wird auf alle angewendet:
index, create, update, edit, delete
Ich will es nur in Index sein.
Mein Code:
Kernel.php
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'roles' => \App\Http\Middleware\CheckRole::class,
];
CheckRole.php
<?php namespace App\Http\Middleware;
use Closure;
class CheckRole{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
// Get the required roles from the route
$roles = $this->getRequiredRoleForRoute($request->route());
// Check if a role is required for the route, and
// if so, ensure that the user has that role.
if($request->user()->hasRole($roles) || !$roles)
{
return $next($request);
}
return response([
'error' => [
'code' => 'INSUFFICIENT_ROLE',
'description' => 'You are not authorized to access this resource.'
]
], 401);
}
private function getRequiredRoleForRoute($route)
{
$actions = $route->getAction();
return isset($actions['roles']) ? $actions['roles'] : null;
}
}
Hallo danke. Ich habe vergessen zu erwähnen, dass ich es schon versucht habe. Funktioniert nicht. Wenn ich das tue, scheint die Rollen-Middleware nicht zu funktionieren. Vielleicht, weil wir den für diese Middleware erlaubten Zugriff wie 'roles' => ['Administrator'] angeben müssen? – jackhammer013
Überprüfen Sie die aktualisierte Antwort. –
Immer noch nicht funktioniert, ich habe sogar versucht, $ this-> Middleware ('Rollen', ['nur' => ['index'], 'Rollen' => ['Administrator']]); und nicht so gut. – jackhammer013