我正在做我的第一个拉拉项目:家谱。我有4个家庭分支,每个分支都有人物/家庭/图片/故事等。网站上的一个用户将可以访问这些家族中的1、2或4个分支的所有东西(我不想为他们不相关的人展示表亲的东西)。
因此,在各种页面上,我希望控制器的集合包含基于给定用户权限的内容。合并似乎是正确的方法。
我有一个范围,可以从家庭的每个分支中得到人们,在下面的例子中,我也为这个月过生日的人提供了一个范围。为了给这个用户显示正确的生日集,如果每个组都有访问权限,我可以通过合并每个组来获得它。
如果我向所有4个家庭分支中的每个人展示我的功能,如下所示:
public function get_birthday_people()
{
$user = \Auth::user();
$jones_birthdays = Person::birthdays()->jones()->get();
$smith_birthdays = Person::birthdays()->smith()->get();
$lee_birthdays = Person::birthdays()->lee()->get();
$brandt_birthdays = Person::birthdays()->brandt()->get();
$birthday_people = $jones_birthdays
->merge($smith_birthdays)
->merge($lee_birthdays )
->merge($brandt_birthdays );
return $birthday_people;我的挑战:我想修改它,这样我就可以检查用户的访问权限,并且只相应地添加每一组人。我想象的东西和上面一样,只是添加了这样的条件:
if($user->jones_access) {
$jones_birthdays = Person::birthdays()->jones()->get();
}
else{
$jones_birthdays =NULL;
}但是对于没有访问权限的用户,这会引发一个错误,因为我无法在NULL上调用merge (或者一个空数组,或者我尝试过的其他版本的“nothing”)。
这样做的好方法是什么?
发布于 2015-12-03 04:16:37
if($user->jones_access) {
$jones_birthdays = Person::birthdays()->jones()->get();
}
else{
$jones_birthdays = new Collection;
}更好的是,在这种情况下进行合并,而不需要其他条件。
$birthday_people = new Collection;
if($user->jones_access) {
$birthday_people->merge(Person::birthdays()->jones()->get());
}发布于 2015-12-03 04:25:55
您将希望您的雄辩查询只为请求它的用户返回相关数据。当琼斯的人访问这个页面时,询问李的生日是没有意义的。
所以你最后要做的是
$birthdays = App\Person::where('family', $user->family)->get();
这吸引了一些人,他们的family属性等于当前用户的家族。
这可能与你现在的关系方式不匹配,但希望它能让你走上正确的轨道,把它们理顺。
如果您真的想继续进行大量查询和检查授权,请阅读Laravel的授权特性。它会让你分配能力给用户,并检查他们容易。
https://stackoverflow.com/questions/34056745
复制相似问题