调用 Gate 时出现 "Maximum function nesting level of '256' reached, aborting!" 错误

Getting "Maximum function nesting level of '256' reached, aborting!" error while calling Gate

我定义了一个名为 UserPolicy 的策略,如下所示:

class UserPolicy
{
    use HandlesAuthorization;

    public function edit(User $user)
    {
        if(Gate::allows('edit', $user)){
            return view('admin.users.edit' , compact('user'));
        }
        abort(403);
    }
}

AuthServiceProvider.php,我这样称呼它:

protected $policies = [
        // 'App\Models\Model' => 'App\Policies\ModelPolicy',
        User::class => UserPolicy::class
    ];

然后在 Blade,我添加了这个:

@can('edit', $user)
   <a href="{{ route('users.edit' , ['user' => $user->id]) }}" class="btn btn-sm btn-primary">Edit</a>
@endcan

但是现在,我得到这个错误:

Class 'App\Policies\Gate' not found

当我在 Policy 中这样调用 Gate 时:use Illuminate\Support\Facades\Gate;

发生此错误:

Maximum function nesting level of '256' reached, aborting!

所以我尝试将 xdebug.max_nesting_level = -1 添加到 php.ini 但仍然出现相同的错误。

我该如何解决这个问题?

你不能 return 除了 Policy 中的 boolean 之外的任何东西 class.You 应该 return falsetrue.

此外,当您在 policy class 中使用 Gate 时,您会再次重复检查 policy class,这会导致无限循环。

所以这是正确的方法:

public function edit(User $user)
{
    if($user_is_allowed_to_access){
        return true
    }
}