【问题标题】:laravel auth policy not working, againlaravel 身份验证策略再次不起作用
【发布时间】:2017-12-26 11:42:50
【问题描述】:

我们又来了,每次我写一个新的策略它都不起作用,原因不明。 我有一个投票系统,其中有一个投票数据透视表,它引用模型和用户以及额外的列('up_voted'、'down_voted')。 我的关系正常,如果我编写这段代码进行测试,我就可以了。我在数据库中设置了用户对模型 id = 1 的示例投票,因此此代码将返回“用户投票”,同时将 id 修改为 2,3、4,无论它将返回“用户未投票”。

$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);

当然它不起作用,无论如何总是返回异常

【问题讨论】:

  • 你有什么异常?

标签: php laravel exception authorization policy


【解决方案1】:

您输入的工作代码包含此条件:

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

所以我假设您只需在您的政策中加入相同的条件:

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

【讨论】:

  • 在工作代码中我​​只是将id提取到一个变量中,使用$model->id是完全一样的。
  • $model->id 不是我改变的。工作代码中的关系名称是model_votes,而不是model
  • 是的,我在这里写策略时出错了,我已经有了model_votes
  • 是的,但你有什么例外?什么失败了?
猜你喜欢
  • 2015-11-01
  • 2021-08-22
  • 2016-03-31
  • 2016-10-21
  • 1970-01-01
  • 2020-07-03
  • 2013-04-17
  • 2016-04-05
相关资源
最近更新 更多