Laravel / Bouncer在门口检查所有权

时间:2019-05-16 01:27:21

标签: laravel

我是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;

1 个答案:

答案 0 :(得分:0)

您确定用户没有其他允许该功能的能力吗?

尝试以下方法:

  1. 从路由中删除中间件。

  2. 在构造函数中删除对authorizeResource的调用。

  3. 然后,在您的get方法的顶部,添加以下内容:

    dd(\Gate::authorize('view', $report));
    

should log the actual ability允许采取操作。