我们再来一次,每当我写一个新政策时,它都不会因为不明原因而起作用。 我有一个投票系统,我有一个投票的数据透视表,引用模型和用户以及额外的列('up_voted','down_voted')。 我的关系正在发挥作用,如果我编写这段代码进行测试,我就可以了。我在DB中为用户设置了模型id = 1的示例投票,因此此代码将返回'user voted',同时将id修改为2,3,无论它将返回'用户没有投票'。
$model_id = 1;
if($user->model_votes->contains('model_id', $model_id)){
dd('user voted');
}else{
dd("user didn't vote");
}
所以我认为我会为此制定政策,这是我在AuthServiceProvider中正确注册的政策:
namespace App\Policies;
use App\Model;
use App\User;
class ModelPolicy
{
public function voteModel(User $user, Model $model)
{
if($user->model_votes->contains('model_id', $model->id)){
return false;
}else{
return true;
}
}
}
所以在控制器中我有这个:
$model = Model::findOrFail($id);
$this->authorize('voteModel', $model);
当然它不起作用,无论什么
总是返回异常答案 0 :(得分:0)
您输入的工作代码包含以下条件:
$user->model_votes->contains('model_id', $model_id)
所以我假设你必须在你的政策中加入相同的条件:
public function voteModel(User $user, Model $model)
{
return $user->model_votes->contains('model_id', $model->id);
}