Laravel 中的权限问题

Permission issue in Laravel

我遇到有关权限的问题

传递给 App\Providers\AuthServiceProvider::App\Providers{closure}() 的参数 1 必须是 App\Providers\User 的实例,给定的 App\User 实例,在中调用C:\xampp\htdocs\Tweety\vendor\laravel\framework\src\Illuminate\Auth\Access\Gate.php 第 473 行(查看:C:\xampp\htdocs\Tweety\resources\views\tweet.blade.php)

我正在努力仅在经过身份验证的用户发布的推文上显示删除按钮

我的控制器

  public function destroy(Tweet $tweet)
      {

          $tweet->delete();
          Session::flash('success');
          return redirect()->route('tweets.index')->with(['message' => 'Tweet Deleted']);

      }

我的用户模型

 public function tweets()
    {
        return $this->hasMany(Tweet::class)->latest();
    }

我的blade

 @can('delete',$tweet)
                <form action="{{ route('tweets.destroy',$tweet->id) }}" method="POST">
                    @csrf
                    @method('DELETE')
                        <button type="submit" class="btn btn-danger">Delete</button>
                </form>
            @endcan

AuthServiceProvider

 public function boot()
    {
        $this->registerPolicies();

        Gate::define('delete', function (User $user , Tweet $tweet){
           return  $tweet->user->is($user);
        });
    }

任何帮助将不胜感激

看起来像是命名空间问题,没有正确导入用户模型的命名空间。

<?php
    
    namespace App\Providers;
    
    use Illuminate\Support\Facades\Gate;
    use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
    use App\User; // looks like you're missing this line.
    use App\Tweet;

    class AuthServiceProvider extends ServiceProvider
    {
        /**
         * The policy mappings for the application.
         *
         * @var array
         */
        protected $policies = [
            'App\Model' => 'App\Policies\ModelPolicy',
        ];
    
        /**
         * Register any authentication / authorization services.
         *
         * @return void
         */
         public function boot()
         {
             $this->registerPolicies();

             Gate::define('delete', function (User $user , Tweet $tweet){
                return  $tweet->user->is($user);
             });
        }
    }

您需要更改:

@can('delete', $tweet)

至:

@can('delete')