$this->authorize ('update', $topic); 方法未能正确授权,过滤无权限的用户,怎么办?

如题$this->authorize('update', $topic);的方法未能正确的起作用,我用ID为1的用户登陆,结果所有的话题都能被更改

class TopicsController extends Controller
{
  ...

    public function update(TopicRequest $request,Topic $topic)
    {
       $this->authorize('update', $topic);//这一句没有起作用
       return '通过';
    }
}

POSTMAN中运行结果如下图,故意选择了topic的ID 为8

file

路由截图如下

  $api->patch('topics/{topic}', 'TopicsController@update')->name('api.topics.update');

数据库数据截图如下

file

TopicPolicy 截图如下

class TopicPolicy extends Policy
{
    public function update(User $user, Topic $topic)
    {
        return $topic->user_id === $user->id;
    }
}

输出$topic如下

public function update(TopicRequest $request,Topic $topic)
    {
       $this->authorize('update', $topic);
       return $this->response->item($topic, new TopicTransformer());
    }

file

输出当前用户如下

 public function update(TopicRequest $request,Topic $topic)
    {
       $this->authorize('update', $topic);
       $user = $this->user();
       return $this->response->item($user, new UserTransformer());
    }

file
我是用ID为1的用户登陆的,为何还能修改topic的ID为8的帖子呢??

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
liyu001989
最佳答案

file

因为id为1的是管理员啊,你用其他id的用户试试

5年前 评论
讨论数量: 15
Jennie

改一下策略里面的这行:return $topic->user_id === $user->id;

5年前 评论

已经更改了,但是仍旧无效果,请问还有其他解决方案吗?

class TopicPolicy extends Policy
{
    public function update(User $user, Topic $topic)
    {
        return $topic->user_id === $user->id;
    }
5年前 评论
宇宙最厉害

能否日志打印一下

class TopicPolicy extends Policy
{
    public function update(User $user, Topic $topic)
    {
        \Log::info($topic);
        \Log::info($user);
        return $topic->user_id === $user->id;
    }

然后去日志文件看看

5年前 评论

请问日志打印的结果哪里去看, storage/logs/laravel.log 里面无今日对应内容??

5年前 评论
Jennie

@soypablo 确定有注册吗?类似这样:

file

5年前 评论
liyu001989

file

因为id为1的是管理员啊,你用其他id的用户试试

5年前 评论

真是一语点醒梦中人~~~~

5年前 评论
liyu001989

file

这样应该就清晰了

5年前 评论

@liyu001989 我擦 我用了管理员用户 换一个普通用户就可以了 谢谢?!

5年前 评论

@沈益飞 @liyu001989
我打印不出来呀。

file

我在策略TopicPolicy这里打印为空白,但是在TopicsController控制器中打印,只能打印出$topic, 而$user值为空。如何处理呀,求大神指点下。 :pray:

file

file

5年前 评论
liyu001989

@JasonLWF 你能把源码 clone 下来,自己运行对比一下哪写错了吗

5年前 评论

@liyu001989 有道理,我现在试试看,调试了几天都没有解决这个权限的问题,很恼火。

5年前 评论

@Jason2018 你打印下当前用户的信息 , 再对比一下, $this->user()->id

5年前 评论

@surest 好的,谢谢。我尝试一下呀。 :grin:

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!