Laravel 阻止用户编辑/查看其他用户的资源

har*_*ryg 4 php laravel

在我的 Laravel 应用程序中,我有多个用户帐户,这些用户帐户拥有分配给他们的资源。例如,说“付款”。要编辑或查看付款,用户将访问该/payment/edit/{payment}路线(payment付款 ID在哪里)。

虽然我有一个身份验证过滤器来阻止未登录的用户访问此页面,但没有什么可以阻止的,例如,用户 1 编辑用户 2 的付款。

是否有我可以使用的过滤器来检查付款(或任何其他资源)属于哪个用户以防止此类问题?

[我正在使用 Laravel 的模型绑定,它会自动获取路由指定的模型,而不是我使用 eloquent 在控制器中获取它。]

see*_*RMS 6

默认情况下不存在这样的过滤器,但是您可以轻松创建一个(取决于您的数据库的设置方式)。在 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)