laravel - Laravel/Bouncer 在门口检查所有权
问题描述
我是保镖新手,我想使用中间件验证所有权。ownVia 闭包确实运行,但即使我强制它返回 false,当我请求路由时也会返回 Report 模型。我错过了什么?
AppServiceProvider@boot
Bouncer::ownedVia(Report::class, function ($report, $user) {
Log::info('Closure ran!');
return $report->hub->user_id === $user->id;
});
路线
Route::get('report/{report}', 'ReportController@get')->middleware('can:view-report,report');
报告控制器
public function __construct()
{
$this->authorizeResource(Report::class);
}
public function get(Report $report)
{
return new ReportResource($report);
}
用户服务
Bouncer::allow($user)->toOwn(Report::class);
用户
class User extends Authenticatable
{
use Notifiable, HasApiTokens, HasRolesAndAbilities;
解决方案
您确定用户没有其他允许这样做的能力吗?
试试这个:
从路由中删除中间件。
删除构造函数中的调用
authorizeResource
。然后,在您的
get
方法的顶部,添加以下内容:dd(\Gate::authorize('view', $report));
这应该记录允许该操作的实际能力。
推荐阅读
- python - 在 Python 中使用 selenium 时出现在网站上,但当我手动访问网站时不会出现
- scala - Marshall Javascript Array to Seq[Any] with Spray JSON
- java - 如何比较两个文件以查看它们是否相同?
- javascript - 限制来自动态数据源的 html 元素的数量
- css - 模态框上的 Angular5 PrimeNG 数据表,模态框后面显示 ContextMenu
- windows - 如何使 CertUtil 递归地进入我的文件夹和子文件夹
- sql - 无法远程连接到 SQL Server
- python - numpy isin 时间戳问题?
- android - Android取消选中Recycler项目上的所有复选框取消选中
- ffmpeg - FFmpeg - 如何获得转码进度?