首页 > 解决方案 > 对 laravel 中页面的分组访问

问题描述

在 AuthServiceProvider 内部定义了访问控制。我需要在路由 web.php 中检查访问页面的权限。如果用户不是管理员,则页面应重定向错误页面或未找到页面。

如果有人尝试从 url 访问页面,如何创建重定向到 404 页面的中间件。

身份验证服务提供者

Gate::define('isAdmin',function($user){
    return $user->type === 'admin';
});

Gate::define('isGeneralUser',function($user){
    return $user->type === 'user';
});

Gate::define('isPaidUser',function($user){
    return $user->type === 'paid';
});

路由web.php

if (Gate::allows('isAdmin') && Gate::allows('isPaidUser')) {
    Route::get('/home-page', function () {
        return view('pages.trades');
    });
}

标签: laravelaccess-control

解决方案


创建中间件

class CheckIsTradeable
{

    public function handle($request, Closure $next)
    {
        if ($request->user()->type !== 'admin' && $request->user()->type !== 'paid') {
            abort(404);
        }

        return $next($request);
    }
}

在里面注册Kernal

protected $routeMiddleware = [
    ...
    'isTradeable' => \App\Http\Middleware\CheckIsTradeable::class,
];

并在您的路线中检查

Route::get('/home-page', function () {
    return view('pages.trades');
})->middleware('isTradeable');

推荐阅读