Laravel过滤器资源控制器 - 只对所有者可访问

时间:2014-06-19 23:26:35

标签: laravel filter controller resources

一个简单的例子告诉你我的问题是什么: 我有一个手机型号,这属于一个用户,一个用户有很多手机。

在我的routes.php中我有Route::resource('phones', 'PhoneController')所以我可以通过以下网址localhost / phones / 5访问特定的手机。

这些手机应该只对所有者可见,所以我可以检查PhoneController中的每个方法(显示,存储,编辑,更新),如果当前用户是这款手机的真正拥有者,但我认为有更好的方法比如在Routes.php中直接使用过滤器来过滤掉这些东西,我不需要进行冗余检查。

也许你了解这个问题,可以帮助我以优雅的方式解决这个问题。

1 个答案:

答案 0 :(得分:3)

您可以将此_constructor放入您的控制器:

class PhoneController extends BaseController {

    public function __construct()
    {
        parent::__construct();
        $methodsToBeFiltered = array('show', 'store', 'edit', 'update');
        $id = Route::parameter('phone');
        $this->beforeFilter('filtername:' . $id, array('only' => $methodsToBeFiltered));
    }
}

确保您已在filtername文件中声明了过滤条件(filters.php)。我已使用phone作为资源名称,如果它不匹配,则从终端运行php artisan routes并找到该路由的url参数名称。