做了授权策略之后,用户还是可以访问别的用户的编辑页面,这是为啥呢?

file
file
file
在update方法中使用验证的时候会提示一个信息,这个是啥问题?

每天进步一点点
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

我觉得可能是你的理解有误,这个update方法并不能控制访问其他人的编辑页面,update是在编辑页面进行提交的时候才会触发的,如果你想要控制用户不能进入其他人的编辑页,那就应该在UserPolicy增加一个控制访问权限的方法,默认的应该是view方法,在这个方法里面验证用户是否有权限访问,然后在控制器的edit方法里面调用$this->authorize('view',$user),这样用户就没有权限访问其他人的编辑页面。

至于你说的IDE报错是因为authorize方法会抛出UnauthorizedException的异常,你没有去捕获和处理这个异常,所以编辑器提示了。因为框架有全局的错误处理,所以这个忽略就好,如果你觉得看着不舒服,可以在加个Doc,告诉编辑器update方法会抛出这个异常就可以了。

还有楼上说的auth middleware和这个问题没有关系,auth是用来用户认证的,和授权没有关系

5年前 评论
讨论数量: 10

我觉得可能是你的理解有误,这个update方法并不能控制访问其他人的编辑页面,update是在编辑页面进行提交的时候才会触发的,如果你想要控制用户不能进入其他人的编辑页,那就应该在UserPolicy增加一个控制访问权限的方法,默认的应该是view方法,在这个方法里面验证用户是否有权限访问,然后在控制器的edit方法里面调用$this->authorize('view',$user),这样用户就没有权限访问其他人的编辑页面。

至于你说的IDE报错是因为authorize方法会抛出UnauthorizedException的异常,你没有去捕获和处理这个异常,所以编辑器提示了。因为框架有全局的错误处理,所以这个忽略就好,如果你觉得看着不舒服,可以在加个Doc,告诉编辑器update方法会抛出这个异常就可以了。

还有楼上说的auth middleware和这个问题没有关系,auth是用来用户认证的,和授权没有关系

5年前 评论

你需要在 UsersController.php中使用添加

public function __construct()
    {
        $this->middleware('auth',[
            'expect' => ['show','create','store']
        ]);
    }

来在初始化UsersController这个类的时候进行授权

5年前 评论

我觉得可能是你的理解有误,这个update方法并不能控制访问其他人的编辑页面,update是在编辑页面进行提交的时候才会触发的,如果你想要控制用户不能进入其他人的编辑页,那就应该在UserPolicy增加一个控制访问权限的方法,默认的应该是view方法,在这个方法里面验证用户是否有权限访问,然后在控制器的edit方法里面调用$this->authorize('view',$user),这样用户就没有权限访问其他人的编辑页面。

至于你说的IDE报错是因为authorize方法会抛出UnauthorizedException的异常,你没有去捕获和处理这个异常,所以编辑器提示了。因为框架有全局的错误处理,所以这个忽略就好,如果你觉得看着不舒服,可以在加个Doc,告诉编辑器update方法会抛出这个异常就可以了。

还有楼上说的auth middleware和这个问题没有关系,auth是用来用户认证的,和授权没有关系

5年前 评论

@FMW 嗯嗯,豁然开朗 :grin:

5年前 评论

教程里都讲的很清楚

5年前 评论

@FMW 你说得很有道理,但是教程里面的内容该作何解释呢?
教程里面只进行了$this->authorize('uppdate',$user) 的限制,但确实导致了访问其他用户的资料页面失败了啊?

5年前 评论

@Catcher 不好意思,没看过教程,所以不知道你说的是什么情况

5年前 评论

@FMW 就是 8.3 权限系统 这一小节啊,你可以稍微浏览下
file屏幕快照 2018-08-15 下午10.14.45.png
你注意一下这里的 url
这一节,这张图片之前的内容就是只做了 $this->authorize('uppdate',$user) 的限制,并没有做 view 的限制,但是仍然会让这里无法访问,所以我不知道为什么。

5年前 评论

edit函数有没有调用这个授权判断呗,有就不能访问啊

5年前 评论

@FMW 尴尬,豁然开朗,谢谢,你说的对。在 edit 里面有那个授权判断。

5年前 评论

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