Как совместно использовать промежуточное программное обеспечение с перенаправлением подлинности, прошедшее проверку подлинности, и промежуточное программное обеспечение с разрешениями ролей? - PullRequest
0 голосов
/ 26 февраля 2019

Я на самом деле использую spatie для роли и разрешений, но у меня есть 1 проблема, которую я не могу решить, она связана с промежуточным программным обеспечением с проверкой подлинности перенаправления.

Я использую в контроллерах промежуточное программное обеспечение роли, чтобы разрешить или запретитьДоступ к контроллеру основан на ролях, поэтому проблема заключается в том, что между этими двумя промежуточными программами происходит некая петля перенаправления, которая приводит к этой ошибке:

ERR_TOO_MANY_REDIRECTS

Далее мой код:

web.php:

Auth::routes();
Route::get('/', ['as'=>'index', 'uses' => 'HomeController@index']);
Route::resource('Empleados', 'EmpleadosController');
Route::resource('Tipopermisos', 'TipopermisosController');
Route::resource('Tiemposcompensatorios', 'TiemposcompensatoriosController');
Route::resource('Permisos', 'PermisosController');
Route::resource('Reportes', 'ReportesController');
Route::get('listaTC', ['as'=>'listaTC', 'uses' =>'TiemposcompensatoriosController@listaTC']);
Route::get('listaP', ['as'=>'listaP', 'uses' => 'PermisosController@listaP']);
Route::get('searchBar', ['as'=>'searchBar', 'uses' => 'PermisosController@searchBar']);
Route::get('generalReport', ['as'=>'generalReport', 'uses' =>'ReportesController@generalReport']);

Домашний контроллер:

class HomeController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }
    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        return redirect()->route('Empleados.index');
    }
}

RedirectIfAuthenticated.php:

class RedirectIfAuthenticated
{
/**
 * Handle an incoming request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Closure  $next
 * @param  string|null  $guard
 * @return mixed
 */
    public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->check()) {
            return redirect('/');
        }
        return $next($request);
    }
}

Наконец, мой метод индекса EmpleadosController whit, который должен перенаправлять имя входа и мой конструктор для проверки, есть ли у пользователя rol для доступа к контроллеру:

     public function __construct()
     {
        $this->middleware(['role:superadmin|admin']);
     }
     /**
      * Display a listing of the resource.
      *
      * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        $data = strtoupper($request->buscar);
        if( strlen($data) >3){
            $empleados = Empleado::where('nombre', 'LIKE', "%{$data}%")->paginate(10);
        }
        else{
            $empleados = Empleado::paginate(10);
        }
        if ($request->ajax()) {
            return view('empleados.list', compact('empleados'))->render();
        }

        return view('empleados.index',compact('empleados'));
    }

Из того, что я могуПосмотрите на это каждый раз, когда пользователь входит в промежуточное программное обеспечение с переадресацией, прошедшее проверку подлинности, что приводит меня к методу index в домашнем контроллере, который перенаправляет меня в EmpleadosController и снова запускает промежуточное ПО роликоторый в то же время снова запускает промежуточное программное обеспечение, прошедшее проверку подлинности с переадресацией, и в результате этого я застрял в этом цикле перенаправления!

Если я удалю промежуточное программное обеспечение роли из моего контроллера, оно будет работать: |

Я будузагрузить любой необходимый код, который вы просите, надеюсь, вы можете помочь мне!Спасибо.

...