0
votes

Here we go again, everytime I write a new policy it doesn't work for unknown reasons. I have a voting system where I have a pivot table for votes that references the model and the user along with extra columns ('up_voted', 'down_voted'). My relations are working and if I write this code to test I get it all ok. I set in the DB an example vote for model id = 1 by the user so this code will return 'user voted' while modifying the id to 2,3, 4 whatever it will return 'user didn't vote'.

$model_id = 1;

if($user->model_votes->contains('model_id', $model_id)){

   dd('user voted');

 }else{

   dd("user didn't vote");
}

so I thought ok I will make a policy for this and this is my policy which I correctly registered in 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;
        }
    }
}

so in the controller I have this:

 $model = Model::findOrFail($id);

 $this->authorize('voteModel', $model);

and of course it doesn't work and always returns an exception no matter what

1
What exception you have?gbalduzzi

1 Answers

0
votes

The working code you put contains this condition:

$user->model_votes->contains('model_id', $model_id)

So I assume that you just have to put the very same condition in your Policy:

public function voteModel(User $user, Model $model)
{
    return $user->model_votes->contains('model_id', $model->id);
}