我已经安装了适用于Laravel的背包,并且作为项目管理员后端使用它已经有一段时间了。我也使用spatie/permission module(可能会带来背包,不记得)为前端创建用户。
目前,所有用户都可以访问前端和后端,无论他们属于哪个组。我想改变它,以便只有" admin"组可以访问后端。我已经跟踪the instructions here分离了前端会话和后端会话,但这并不是我想要的,因为所有用户仍然可以访问项目的两个站点。
我猜我需要为CRUD路线添加一个警卫,但我发现它比它应该更难。任何关于如何做到这一点的指针将不胜感激。 TIA。
答案 0 :(得分:2)
您可以创建一个新的中间件,并在路由组中将其用于管理路由。
要创建新的中间件,请使用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方法,但还有更多可以使用的方法。 See the spatie/laravel-permissions documentation for more info.
现在,让我们将此中间件分配为“名称”,以便我们可以在管理员的路由组中使用它。在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
});
现在,您对管理路由的所有请求都应受到用户角色检查的保护。
如果您遇到任何问题,请告诉我们您的具体情况。
致以最诚挚的问候,
〜克里斯蒂安