Использование одного и того же маршрута для нескольких промежуточных программ в laravel - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть два двух промежуточных ПО. Один админ, а другой учитель. В админке получит доступ ко всем созданным URL, а учитель получит только 2 или 3 URL.

Вот мой маршрут

 Route::group(['middleware' => ['adminAuth']], function () {
    Route::get('dashboard', array('as' =>'Teacher Dashboard', 'uses' => 'UserController@dashBoard'));
    Route::get('users/profile/edit/{id}', array('as' => 'User Profile Update', 'uses' => 'UserController@userProfile'));
    Route::post('users/profile/update/{id}', array('as' => 'User Profile Update', 'uses' => 'UserController@updateUserProfile'));

    Route::get('student/leave/application', array('as' => 'Student Leave Application', 'uses' =>'LeaveApplicationController@studentLeaveApplicationList'));
    Route::get('leave/application/student/create', array('as' => 'Student Leave Application', 'uses' =>'LeaveApplicationController@studentLeaveApplicationCreate'));
    Route::post('leave/student/application/store', array('as' => 'Student Leave Application', 'uses' =>'LeaveApplicationController@studentLeaveApplicationStore'));
    Route::get('leave/student/application/categories', array('as' => 'Student Leave Application Categories', 'uses' => 'LeaveApplicationController@studentLeaveCategories'));

});
Route::group(['middleware' => ['teacherAuth']], function () {
    Route::get('teacher/dashboard', array('as' =>'Teacher Dashboard', 'uses' => 'UserController@teacherDashBoard'));
    Route::get('users/profile/edit/{id}', array('as' => 'User Profile Update', 'uses' => 'UserController@userProfile'));
    Route::post('users/profile/update/{id}', array('as' => 'User Profile Update', 'uses' => 'UserController@updateUserProfile'));
});

Я хочу обновить каждый профиль пользователя из обоих промежуточных программ. он работает нормально, когда я использую URL-адрес обновления профиля для любого промежуточного ПО, но когда я использую URL-адрес обновления профиля в обоих промежуточных программах, тогда он не работает, просто перенаправить на другой URL-адрес /AdminAuth.php

 public function handle($request, Closure $next)
{
    $role = User::getUserById(Auth::id());
    if(!(\Auth::check()) || ($role->role_name != "admin"))
    {
        if ($request->ajax())
        {
            return response('Unauthorized.', 401);
        } else {
            \Session::flash('errormessage','Invalid Request');
            \Session::put('pre_login_url',\URL::current());
            return redirect()->guest('/auth/login');
        }
    }
    return $next($request);
}

Для учителя, Middleware / TeacherAuth. php

 public function handle($request, Closure $next)
{
    $role = User::getUserById(Auth::id());
    if(!(\Auth::check()) || ($role->role_name != "teacher"))
    {
        if ($request->ajax())
        {
            return response('Unauthorized.', 401);
        } else {
            \Session::flash('errormessage','Invalid Request');
            \Session::put('pre_login_url',\URL::current());
            return redirect()->guest('/auth/login');
        }
    }
    return $next($request);
}

Вот мое ядро. php

 'adminAuth'=>\App\Http\Middleware\AdminAuth::class,
 'teacherAuth'=>\App\Http\Middleware\TeacherAuth::class,

1 Ответ

0 голосов
/ 19 апреля 2020

Laravel использует сопоставление с шаблоном для маршрутов и устанавливает первый найденный. Промежуточные программы не изменяют пути маршрута, поэтому laravel распознает только первый users/profile/update/{id} маршрут.

Вы либо измените путь маршрута, чтобы они не были точно такими же, либо вы go и отделите logi c в вашем методе контроллера. Например, в вашем методе UserController :: updateUserProfile () вы можете создать закрытые методы updateTeacher (), updateAdmin (). Таким образом, ваша логика c может выглядеть так:

if($role->role_name == "teacher")
    {
      return $this->updateTeacher();
} else if($role->role_name == "admin")
{
    return $this->updateAdmin();
}

Это означает, что вам не понадобятся эти 2 промежуточных программного обеспечения. Просто примените auth промежуточное ПО на маршруте

...