如何禁止用户访问 CRUD 后端

How to Disallow User Access to CRUD Backend

我已经安装了 Laravel 的 Backpack,并且已经将其用作项目的管理员后端一段时间了。我还使用 spatie/permission module(可能与 Backpack 一起提供,不记得了)为前端创建用户。

目前,无论属于哪个组,所有用户都可以访问前端和后端。我想更改它,以便只有 "admin" 组中的成员才能访问后端。我已经按照 the instructions here 分离前端和后端会话,但这并不是我真正想要的,因为所有用户仍然能够访问项目的两个站点。

我想我需要为 CRUD 路由添加一个守卫,但我发现它比应该的要难得多。任何有关如何执行此操作的指示将不胜感激。 TIA.

您可以创建一个新的中间件并在您的路由组中将其用于管理路由。

要创建新的中间件,请使用 php artisan 命令,如下所示:(您可以随意命名新的中间件:

php artisan make:middleware RequireAdminRole

现在,在你的新中间件中,在 handle 函数上你可以有这样的东西 returns 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 方法,但您还可以使用更多方法。 See the spatie/laravel-permissions documentation for more info.

现在,让我们为这个中间件分配一个 'name',这样我们就可以在管理员的路由组中使用它。在 App\Kernel.php 文件中,最后,在 $routeMiddleware 数组中添加它并给它一个新的,例如:

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

最后,您可以将这个中间件添加到您的管理路由组中(如果您使用的是最新的背包 3.4 版本,它应该在 custom.php 文件中):

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

现在你对管理路由的所有请求都应该受到用户角色检查的保护。

如果您遇到任何问题,请告诉我们您的进展情况。

此致,

~克里斯蒂安