如何禁止用户访问CRUD后端

时间:2018-05-12 12:55:37

标签: backpack-for-laravel

我已经安装了适用于Laravel的背包,并且作为项目管理员后端使用它已经有一段时间了。我也使用spatie/permission module(可能会带来背包,不记得)为前端创建用户。

目前,所有用户都可以访问前端和后端,无论他们属于哪个组。我想改变它,以便只有" admin"组可以访问后端。我已经跟踪the instructions here分离了前端会话和后端会话,但这并不是我想要的,因为所有用户仍然可以访问项目的两个站点。

我猜我需要为CRUD路线添加一个警卫,但我发现它比它应该更难。任何关于如何做到这一点的指针将不胜感激。 TIA。

1 个答案:

答案 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
});

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

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

致以最诚挚的问候,

〜克里斯蒂安