dans mon application web, j'ai un panneau d'administration et j'essaie de donner accès aux utilisateurs qu'ils ont un rôle d'administrateur par ce code:
namespace App\Http\Middleware;
use Closure;
class CheckUserAdminRole
{
public function handle($request, Closure $next)
{
if (auth()->check()) {
if (auth()->check() && !auth()->user()->hasRole('admin')) {
auth()->logout();
return redirect(route('system.messages','userIsNotAdmin'));
}
}
return $next($request);
}
}
et dans mes routs j'ai ce groupe de routes:
Route::group(['namespace' => 'Dashboard', 'middleware' => ['auth:web'], 'prefix' => 'dashboard'], function () {
$this->group(['prefix' => 'administrator'], function () {
$this->get('panel', 'AdminController@index');
});
mon noyau:
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
...
\App\Http\Middleware\CheckUserAdminRole::class,
];
maintenant quand j'ajoute mon middleware en tant que CheckUserAdminRole
au groupe de routage comme avec ce code:
Route::group(['namespace' => 'Dashboard', 'middleware' => ['auth:web','CheckUserAdminRole'], 'prefix' => 'dashboard'], function () {
je reçois cette erreur:
Class CheckUserAdminRole does not exist
ces codes n'ont pas pu résoudre mon problème:
php artisan route:clear
php artisan cache:clear
php artisan config:clear
composer dump-autoload
Au lieu d'enregistrer votre middleware dans le $middleware
array, vous devez l'enregistrer dans $routeMiddleware
ainsi:
protected $routeMiddleware = [
...
'checkAdmin' => \App\Http\Middleware\CheckUserAdminRole::class,
];
Remarque: enregistrement d'un logiciel intermédiaire dans le $middleware
array entraîne son exécution pour chaque requête et n'est donc pas applicable sur des routes spécifiques.
Ensuite, vous pouvez l'utiliser dans vos itinéraires avec le nom checkAdmin
:
Route::group(['namespace' => 'Dashboard', 'middleware' => ['auth:web','checkAdmin'], 'prefix' => 'dashboard'], function () {
Vous pouvez également utiliser le middleware et le groupe de routage ensemble comme suit:
Route::group(['prefix' => 'admin', 'middleware' => 'auth'], function()
{
//All the routes that belongs to the group goes here
Route::get('dashboard', function() {} );
});
Vous pouvez essayer un middleware avec préfixe et groupes.
Route::middleware(['Auth'])->prefix('api/')->group(function() {
Route::group(['prefix' => 'review/'], function () {
Route::get('/', 'User\Controllers\Api\UserController@getUserReviews');
});
});
j'espère que ça aide