Как запретить пользователю доступ к бэкэнду CRUD

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

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

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


person Ted Stresen-Reuter    schedule 12.05.2018    source источник


Ответы (1)


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

Чтобы создать новое промежуточное ПО, используйте команду 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-permissions.

Теперь давайте назначим этому промежуточному программному обеспечению «имя», чтобы мы могли использовать его в наших группах маршрутов для администратора. Внутри файла 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
});

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

Сообщите нам, как все прошло для вас, и если вы столкнулись с какими-либо проблемами.

С наилучшими пожеланиями,

~ Кристиан

person cristianuibar    schedule 15.05.2018
comment
Большое спасибо за четкие инструкции. Мы подозревали, что это будет что-то вроде этого, но не были уверены в деталях. - person Ted Stresen-Reuter; 16.05.2018