我有两个模型:一个用户模型和一个教训模型。用户到课是一对多的关系。我在用户和课程模型中定义了这个hasMany关系。
本质上,我想把用户限制在他们的课程上;用户8不应该能够访问用户7的课程。
然而,这是行不通的:
return User::find($userId)->lessons()->where('id',$id);我不想说
return Lessons::find($lessonId)因为这意味着任何用户都可以对另一个用户的课程做任何事情。
发布于 2014-04-25 21:58:57
public function show($userId, $lessonId)
{
$lesson = Lesson::find($lessonId);
if($lesson->user_id == $userId)
{
return $lesson;
} else {
return "You don't have access!";
}
}发布于 2014-04-25 21:40:13
我想你想要的是一个过滤器
Route::filter('userlessons', function($route, $request)
{
// there's probably a better way to get the values from the request,
// but I couldn't find it
//
$uid = $request->segment(2);
$lid = $request->segment(4);
// check user ID & lesson values - not sure how you want to test this;
// I just made something up here
//
if(!User::find($uid)->lessons->contains($lid))
throw new NotAuthorizedException("You can't do that!");
});
Route::get("user/{uid}/lesson/{lid}", array("before"=>"userlessons", function($uid, $lid){
return "That user can access that lesson!";
}));发布于 2014-04-25 21:27:54
要获得与给定用户相关的经验教训,请使用dynamic属性:
$user = User::find($userId);
$lessons = $user->lessons确保在用户模型中具有hasMany关系
public function lessons(){
return $this->hasMany('lesson');
}https://stackoverflow.com/questions/23303286
复制相似问题