如何禁止用户访问 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
});
现在你对管理路由的所有请求都应该受到用户角色检查的保护。
如果您遇到任何问题,请告诉我们您的进展情况。
此致,
~克里斯蒂安
我已经安装了 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
});
现在你对管理路由的所有请求都应该受到用户角色检查的保护。
如果您遇到任何问题,请告诉我们您的进展情况。
此致,
~克里斯蒂安