Запретить пользователям, ориентированным на роли, доступ к маршруту - PullRequest
0 голосов
/ 02 октября 2019

У меня 2 роли, а это admin и user. Теперь при входе администратор переходит на маршрут dashboard, а пользователь - на home. Когда пользователь вошел в систему и изменил URL на http://127.0.0.1:8000/dashboard, он может получить доступ к панели администратора, и я этого не хочу. Как я могу добиться этого?

PS. Я новичок в Laravel

Ответы [ 2 ]

0 голосов
/ 02 октября 2019

Хорошей практикой для этого является использование Middewares. Создайте промежуточное ПО для администраторов и пользователей (я сделаю это только для администраторов, вы можете сделать то же самое для пользователей):

<?php

namespace App\Http\Middleware;

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

class AdminMiddleware
{
    public function handle($request, Closure $next)
    {
        if(Auth::check()){
            // check auth user role (I don't know how you can implement this for yourself, this is just for me)
            if(Auth::user()->role->name == 'admin'){
                return $next($request);
            } else {
                return redirect()->route('admin.dashboard'); // for admins
            }
        }

        return redirect()->route('main'); // for users
    }
}

В "app / Http / Kernel.php" в массиве $ routeMiddleware зарегистрируйте, что(добавьте в конец этого массива).

'Admin' => \App\Http\Middleware\AdminMiddleware::class,

Теперь, если вы используете все запросы в "routs / web.php" (на самом деле я так думаю), вы можете использовать такие маршруты для администраторов. :

// USER ROUTES
Route::get('/', 'FrontController@main')->name('main');

// ADMIN ROUTES
Route::group([
    'as' => 'admin.',
    'middleware' => [ 'Admin' ],
], function () {
    Route::get('dashboard', 'AdminController@dashboard');
});

Обновление кешей через "php artisan config: cache". Попробуйте!

0 голосов
/ 02 октября 2019

Используйте промежуточное ПО для администрирования маршрута или внутри контроллера, как это:

Route::put('post/{id}', function ($id) {
//
})->middleware('role:editor');

или

Route::middleware(['auth', 'admin'])->group(function (){

Route::get('dashboard', 'HomeController@index')->name('home.index');

});

или внутри контроллера, как это:

public function __construct()
{
    $this->middleware(['auth', 'admin'])->except(['index']);
}

или вы можете использовать this для промежуточного программного обеспечения.

...