请问Laravel中的Policy单独使用和配合Gate Facade使用时的真值为何会相反?
- 运行环境
i7-6700HQ 8GBRAM
1). 当前使用的 Laravel 版本?
Laravel 9.*
//: <> (使用 php artisan –version 命令查看)
2). 当前使用的 php/php-fpm 版本?
PHP 版本:
8.0.28
//: <> (使用 php –version 命令查看 php 版本)
php-fpm 版本:
master
//: <> (代码里 phpinfo 函数,然后页面访问查看 php-fpm 版本)
//: <> (如不方便使用 phpinfo 函数 ,使用 ps aux | grep php-fpm.conf 命令查)
//: <> ( 看 php-fpm 版本。如有多个,请以 nginx 站点配置为准。)
3). 当前系统
OpenEuler 22.03LTS
//: <> (期待数值 Windows 10 / Ubuntu 20.4 / CentOS 8)
4). 业务环境
开发环境
//: <> (期待信息 开发环境 或 生产环境)
//: <> (是否使用负载均衡?请提供相关信息)
5). 相关软件版本
nginx 1.21.5
//: <> (提供相关软件的版本,如 Nginx 、MySQL、MongoDB 等)
- 问题描述?
这个是单独使用Policy的:
这个是Policy配合Gate Facade使用的:
在单独使用Policy时,Policy返回TRUE,用户就会被授权。
当使用Gate Facade时,Gate::denies(…)时,真值为TRUE,Gate::allows(…)时,真值为FALSE。
您期望得到的结果?
请问这些是什么问题?同一个Policy在不同用法之下真值为何会相反?如何解决?您实际得到的结果?#
如果你需要判断某个用户,是否有权执行某个行为,你可以在
Gate
门面中,使用forUser
方法:无论是用
Auth::user()->can()
还是Gate::allow()
其底层都是通过Illuminate\Auth\Access\Gate::check()
方法实现的,区别在于,Auth::user()
是通过指定鉴权的用户,Gate::allow()
则是自动注入用户信息。所以我觉得可能问题出在你两次测试的场景并不完全一致,你可以把前后两次路由的定义也附上(主要是看 Auth 中间件是否都起作用了),以及在使用
Gate::allow()
前先试试Auth::user
能否正常获取用户信息!