在我的 Laravel 应用程序中,我有多个用户帐户,这些用户帐户拥有分配给他们的资源。例如,说“付款”。要编辑或查看付款,用户将访问该/payment/edit/{payment}路线(payment付款 ID在哪里)。
虽然我有一个身份验证过滤器来阻止未登录的用户访问此页面,但没有什么可以阻止的,例如,用户 1 编辑用户 2 的付款。
是否有我可以使用的过滤器来检查付款(或任何其他资源)属于哪个用户以防止此类问题?
[我正在使用 Laravel 的模型绑定,它会自动获取路由指定的模型,而不是我使用 eloquent 在控制器中获取它。]
默认情况下不存在这样的过滤器,但是您可以轻松创建一个(取决于您的数据库的设置方式)。在 app/filters.php 中,您可以执行以下操作:
Route::filter('restrictPermission', function($route)
{
$payment_id = $route->parameter('payment');
if (!Auth::user()->payments()->find($payment_id)) return Redirect::to('/');
});
Run Code Online (Sandbox Code Playgroud)
这会将当前登录用户的 payment_id(在您的数据库中)与传递到路由中的 {payment} 参数进行比较。显然,根据您的数据库的设置方式(例如,如果 payment_id 在单独的表中),您需要更改条件。
然后,将过滤器应用于您的路线:
Route::get('/payment/edit/{payment}', array('before' => 'restrictPermission'));
Run Code Online (Sandbox Code Playgroud)