Laravel 4 - 用户应该只访问多用户数据库中的数据

时间:2014-06-06 02:26:39

标签: php authentication laravel multi-user database-security

我希望我能正确描述这个主题。我正在创建一个联系人管理应用程序,每个用户在同一个联系人表中都有自己的联系人。用户必须无法看到对方的联系人。

我开始这样做但必须有更好的方法:

$contact = Contact::where('user_id', Auth::user()->id)->find($id);

上面一行的问题是我想这样写:

$contact = Contact::find($id)

有没有办法让where子句以某种方式加载,例如过滤器,以便所有搜索都必须匹配Auth::user()->id

2 个答案:

答案 0 :(得分:0)

根据建议,您可以使用查询范围。在Contact模型中添加此内容:

public function scopeOfUser($query, $user_id)
{
    return $query->where('user_id', '=', $user_id);
}

然后像这样使用它:$contacts = Contact::ofUser(Auth::user()->id)->get();

答案 1 :(得分:0)

我找到了我在laracasts.com上寻找的答案。 (视频:存储库简化)

我通过创建存储库解决了这个问题。例如在我的ContactController中:

$contact = Contact::where('user_id', Auth::user()->id)->find($id);

现在是

$contact = $this->contact->getAll();

DbRepository文件包含:

public function getAll() {
    return $this->model->where('user_id', Auth::user()->id)->get();
}

还有更多内容,您需要观看视频才能进行设置。设置起来要做的工作要多得多,但是我的所有控制器都可以使用DbRepository,因为每个表都有一个user_id字段。