Выдача разрешения в Laravel - PullRequest
0 голосов
/ 04 августа 2020

У меня проблема с разрешением

Аргумент 1, переданный в App \ Providers \ AuthServiceProvider :: App \ Providers {closure} (), должен быть экземпляром 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();
    }

мое лезвие

 @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);
        });
    }

Любая помощь будет принята с благодарностью

Ответы [ 2 ]

1 голос
/ 04 августа 2020

Похоже, проблема с пространством имен, и пространство имен модели пользователя было импортировано неправильно.

<?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);
             });
        }
    }
0 голосов
/ 04 августа 2020

Вам нужно будет изменить:

@can('delete', $tweet)

на:

@can('delete')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...