laravel auth政策不起作用,再次

时间:2017-07-20 16:30:42

标签: php laravel exception authorization policy

我们再来一次,每当我写一个新政策时,它都不会因为不明原因而起作用。 我有一个投票系统,我有一个投票的数据透视表,引用模型和用户以及额外的列('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);

当然它不起作用,无论什么

总是返回异常

1 个答案:

答案 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);
}