我是bouncer的新手,我想使用中间件来验证所有权。 ownerVia闭包确实会运行,但是即使我强迫它返回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');
ReportController
public function __construct()
{
$this->authorizeResource(Report::class);
}
public function get(Report $report)
{
return new ReportResource($report);
}
UserService
Bouncer::allow($user)->toOwn(Report::class);
用户
class User extends Authenticatable
{
use Notifiable, HasApiTokens, HasRolesAndAbilities;
答案 0 :(得分:0)
您确定用户没有其他允许该功能的能力吗?
尝试以下方法:
从路由中删除中间件。
在构造函数中删除对authorizeResource
的调用。
然后,在您的get
方法的顶部,添加以下内容:
dd(\Gate::authorize('view', $report));
此should log the actual ability允许采取操作。