Как запретить доступ пользователей к CRUD Backend - PullRequest
0 голосов
/ 12 мая 2018

У меня установлен Backpack для Laravel, и я уже некоторое время использую его в качестве администратора для проекта.Я также использую модуль пространств / разрешений (может поставляться с Backpack, не помню) для создания пользователей для внешнего интерфейса.

В настоящее время все пользователи имеют доступ к обоимпередний и задний конец независимо от группы, к которой они принадлежат.Я хотел бы изменить это так, чтобы только участники в группе «администратор» могли получить доступ к серверной части.Я следовал инструкциям здесь для разделения внешних и внутренних сессий, но это не совсем то, чего я хочу, поскольку все пользователи по-прежнему могут получить доступ к обоим сайтам проекта.

I 'Полагаю, мне нужно добавить охрану на маршруты CRUD, но я считаю, что это намного сложнее, чем должно быть.Любые указатели о том, как это сделать, будут с благодарностью.ТИА.

1 Ответ

0 голосов
/ 15 мая 2018

Вы можете создать новое промежуточное ПО и использовать его в своей группе маршрутов для маршрутов администратора.

Чтобы создать новое промежуточное ПО, используйте команду php artisan, например, так: (Вы можете назвать новое промежуточное ПО как угодно:

php artisan make:middleware RequireAdminRole

Теперь в вашем новом промежуточном программном обеспечении в функции handle может быть что-то вроде этого, которое возвращает сообщение об ошибке 403 Forbidden:

public function handle($request, Closure $next)
{

    $user = auth()->user();

    if (!$user) return $next($request);

    if (!$user->hasRole('Admin'))
    {
        // if your sessions are decoupled from the frontend
        // you can even logout the user like so:
        // auth()->logout();

        abort(403, 'Access denied');
    }

    return $next($request);
}

Здесь мы используем метод hasRole, но есть и другие, которые вы можете использовать. Для получения дополнительной информации см. Документацию по разрешениям spatie / laravel.

Теперь давайте назначим этому промежуточному программному обеспечению «имя», чтобы мы могли использовать его в наших группах маршрутов для администратора. Внутри файла App\Kernel.php, в конце концов, внутри массива $routeMiddleware добавьте его и дайте ему новое, например:

'isadmin' => \App\Http\Middleware\RequireAdminRole::class,

И, наконец, вы можете добавить это промежуточное ПО в группу маршрутов администратора (которая должна быть в файле custom.php, если вы используете последнюю версию backpack 3.4):

Route::group([
    'prefix'     => 'admin',
    'middleware' => ['web', 'isadmin', config('backpack.base.middleware_key', 'admin')],
    'namespace'  => 'App\Http\Controllers\Admin',
], function () {
    // your routes are here
});

Теперь все ваши запросы к маршрутам администратора должны быть защищены проверкой роли пользователя.

Пожалуйста, дайте нам знать, как все прошло для вас, и если у вас возникли какие-либо проблемы.

С уважением,

~ Cristian

...