如前所述,您可以通过创建一个中间件来检查您的资源是否可供登录用户使用来做到这一点。
查看有关中间件的一些详细信息here https://laravel.com/docs/5.6/middleware
首先,通过创建一个中间件php artisan
, 像这样
php artisan make:middleware AuthResource
接下来,将其添加到您的App\Http\Kernel.php
protected $routeMiddleware = [
...
'AuthResource' => \App\Http\Middleware\AuthResource::class,
];
在您的路线中,您现在可以执行以下操作:
Route::get('{companyID}', ['uses' => CompanyController@index, 'middleware' => 'AuthResource']);
这样,你的AuthResource
每当调用路由时都会使用中间件。
在你的App\Http\Middleware\AuthResource.php
你必须改变代码
public function handle($request, Closure $next)
{
return $next($request);
}
检查当前登录用户是否可以使用该资源。
我假设您的公司表有一个字段user_id
,将公司与用户联系起来。如果您的数据结构不同,则需要相应地更改代码。
public function handle($request, Closure $next)
{
if ($request->route('companyID')) {
$company = Company::find($request->route('companyID'));
if ($company && $company->user_id != auth()->user()->id) {
return redirect('/');
}
}
return $next($request);
}
这样我们就可以检查路由参数是否具有名称companyID
存在,如果存在,我们检查当前登录的用户是否可以使用它。如果不companyID
参数可用,页面可以不受任何限制地加载。
这样,您可以在中间件中复制/粘贴任何参数的代码,以便中间件适用于多个资源(不仅仅是公司)。