【问题标题】:Laravel 8: Class 'App\Policies\Gate' not foundLaravel 8:找不到类'App\Policies\Gate'
【发布时间】:2021-06-12 05:55:14
【问题描述】:

我定义了一个名为 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

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

找不到类“App\Policies\Gate”

我该如何解决这个问题?

【问题讨论】:

    标签: php laravel laravel-8 policy


    【解决方案1】:

    看起来你还没有在UserPolicy类中导入Gate门面

    use Illuminate\Support\Facades\Gate;
    

    【讨论】:

    • 太棒了!但现在我得到Maximum function nesting level of '256' reached, aborting!
    • @tejoslaeslio 您的门需要返回 true 或 false 以指示用户是否有权执行任务。您正在返回视图(它本身再次调用门)
    • @apokryfos 那么正确的方法是什么
    • 这取决于你需要门做什么。这个想法是当你有@can('edit', $user) 行来确定当前用户是否可以对参数$user 执行edit 操作。如果当前用户可以编辑$user,则门需要返回true,否则返回false。这实际上取决于您的编辑策略是什么。也许您需要检查当前用户是否与$user 相同,或者当前用户是否是用户管理员或类似的人
    猜你喜欢
    • 1970-01-01
    • 2021-03-07
    • 2021-10-15
    • 1970-01-01
    • 2021-03-29
    • 2021-01-08
    • 2021-09-09
    • 2021-02-27
    • 2021-03-11
    相关资源
    最近更新 更多