Проверьте аутентификацию с типом роли в промежуточном программном обеспечении laravel5.5

Я знаю, что это очень распространенный вопрос, но я застрял в нем. Я использую Laravel 5.5 и разрабатываю ERP. В ERP некоторые URL-адреса доступны только суперадминистратору, поэтому я создаю промежуточное ПО.

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class CheckAdmin
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $user = Auth::user();
        if ($user->user_role_id == 1) {
            return $next($request);
        } else {
            return redirect('/');
        }

    }
}

Я зарегистрировал это промежуточное ПО в Kernel.php

protected $routeMiddleware = [
        'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'admin' => \App\Http\Middleware\CheckAdmin::class
    ];

и использовать это промежуточное ПО в маршрутах

$routes = [
    "students" => "StudentsController",
    "teachers" => "TeachersController",
    "courses" => "CoursesController",
    "subjects" => "SubjectsController",
    "colleges" => "CollegesController",
    "branches" => "BranchesController",
];
Route::group(['middleware' => ['web', 'auth']], function () use ($routes){
    Route::match(["get","post"],'/users','UsersController@index')->middleware('admin');
    Route::get('/users/status/{id}','UsersController@setStatus')->middleware('admin');
    Route::get('/users/delete/{id}','UsersController@delete')->middleware('admin');
    Route::match(["get","post"],'/users/add','UsersController@add')->middleware('admin');
    Route::match(["get","post"],'/users/edit/{id}','UsersController@edit')->middleware('admin');
    Route::match(["get","post"],'/users/view/{id}','UsersController@view')->middleware('admin');


    foreach($routes as $route => $class){
        Route::match(["get","post"],'/'.$route,$class.'@index');
        Route::get('/'.$route.'/status/{id}',$class.'@setStatus');
        Route::get('/'.$route.'/delete/{id}',$class.'@delete');
        Route::match(["get","post"],'/'.$route.'/add',$class.'@add');
        Route::match(["get","post"],'/'.$route.'/edit/{id}',$class.'@edit');
        Route::match(["get","post"],'/'.$route.'/view/{id}',$class.'@view');
    }

    // additions routes
    Route::match(["get","post"],'/courses/assign-subjects','CoursesController@assign_subjects');
    Route::match(["get"],'/courses/already-assign-subjects/{id}','CoursesController@already_assigned_subjects');
});

Это промежуточное ПО не вызывается с маршрутами users/*. Когда я регистрирую этот $middleware в kernel.php, он работает, но Auth::user() каждый раз возвращает null. Итак, как я могу проверить вошедшую в систему роль пользователя? Я где-то читал, что в версии L5.5 Session не работает в constructor, тогда как лучше всего проверить роль пользователя в промежуточном программном обеспечении.

Где Auth :: routes (); ?

PSA 11.03.2018 06:04

Как выглядит ваша группа промежуточного программного обеспечения в Интернете?

user320487 11.03.2018 06:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
575
1

Ответы 1

Для проверки промежуточного ПО admin можно использовать вложенное промежуточное ПО.

    Route::group(['middleware' => ['web', 'auth']], function () use ($routes){
    Route::match(["get","post"],'/users','UsersController@index')->middleware('admin');

Route::group(['middleware' => ['admin'], function () use ($routes){

    Route::get('/users/status/{id}','UsersController@setStatus')->middleware('admin');
    Route::get('/users/delete/{id}','UsersController@delete')->middleware('admin');

});

    Route::match(["get","post"],'/users/add','UsersController@add')->middleware('admin');
    Route::match(["get","post"],'/users/edit/{id}','UsersController@edit')->middleware('admin');
    Route::match(["get","post"],'/users/view/{id}','UsersController@view')->middleware('admin');


    foreach($routes as $route => $class){
        Route::match(["get","post"],'/'.$route,$class.'@index');
        Route::get('/'.$route.'/status/{id}',$class.'@setStatus');
        Route::get('/'.$route.'/delete/{id}',$class.'@delete');
        Route::match(["get","post"],'/'.$route.'/add',$class.'@add');
        Route::match(["get","post"],'/'.$route.'/edit/{id}',$class.'@edit');
        Route::match(["get","post"],'/'.$route.'/view/{id}',$class.'@view');
    }

    // additions routes
    Route::match(["get","post"],'/courses/assign-subjects','CoursesController@assign_subjects');
    Route::match(["get"],'/courses/already-assign-subjects/{id}','CoursesController@already_assigned_subjects');
});

Когда промежуточное ПО администратора находится за пределами web and auth, оно всегда будет возвращать null

Надеюсь это поможет

Другие вопросы по теме