Переадресация Laravel в зависимости от роли - разрешение / laravel-разрешение - PullRequest
0 голосов
/ 29 декабря 2018

Я использую этот пакет spatie / laravel-Разрешение и я хочу сделать следующее:

super-admin, admin, члены имеют одинаковый логин и после входа в него перенаправитьна разные маршруты.Супер-админ и админ имеют одинаковое перенаправление.Поэтому я поставил этот код.

//app\Http\Controllers\Auth\LoginController.php
protected function authenticated(Request $request, $user)
{
    if ( $user->hasAnyRole(['super-admin', 'admin']) ) {// do your margic here
        return redirect()->route('admin.dashboard');
    }

     return redirect('/home');
}

, а затем это мои маршруты //routes/web.php

Auth::routes();
Route::group(['middleware' => ['role:member']], function () {
    Route::get('/', 'HomeController@index')->name('home');
});
Route::group(['middleware' => ['role:super-admin|admin'], 'prefix' => 'admin'], function () {
    Route::get('/', 'Admin\HomeController@dashboard')->name('admin.dashboard');
});

После входа в систему я хочу сделать, когда super-admin / admin посетите site.com/*, он должен перенаправить на site.com/admin/, потому что он не авторизован, потому что он не участник , а также когда member посетите site.com/admin/*, он перенаправит на site.com/, потому что он не admin / super-admin , остальные перейдут на страницу входа, когда не аутентифицированы.

Он выглядит следующим образом: image

Он должен перенаправить в зависимости от их роли на главной странице, вместо этого отображается ошибка 403.

1 Ответ

0 голосов
/ 29 декабря 2018

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

Вам потребуется написать свое собственное промежуточное программное обеспечение, в котором вы будете проверять, есть ли у пользователя соответствующие роли, и перенаправлять на соответствующий URL.Очень упрощенным примером будет что-то вроде этого (в случае с администратором).

<?php

namespace App\Http\Middleware;

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

class CheckIfAdmin
{
    /**
     * 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 ( $user->hasAnyRole(['super-admin', 'admin']) ) {
            return $next($request);
        }

        return redirect('/');
    }
}

Затем вы бы прикрепили это промежуточное ПО вместо другого.

...