Проблема с воротами Laravel

Я пытаюсь проверить, разрешено ли пользователю просматривать страницу с помощью Gates и Policies в Laravel. В моем web.php у меня есть маршрут:

$litter = Litter::find($id);

//Security gate
if(Gate::allows('edit-litter', Auth::user(), $litter)){
  return View::make('mykennel.litters.pupsheet')->with([
    //some variables
  ]);
}else{
  $ip_info = log_user_connection('Authorization Error');
  return View::make('errors.authorization')->with([
    'ip_info' => $ip_info,
    'litter_id' => $litter->id,
    'user_id' => Auth::user()->id,
    'litter_user' => $litter->user_id
  ]);
}

Моя политика такая (AuthServiceProvider.php):

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

      Gate::define('edit-litter', function ($user, $litter) {
          return $user->id == $litter->user_id;
      });
  }

Когда я проверяю это, я всегда получаю только ошибку авторизации, поэтому я решил проверить, не вижу ли я что-то, отправив эти переменные выше в представление ошибок, и, конечно же, user_id равен litter_user (две вещи, которые я сравниваю):

{$litter_user}}, {{$user_id}} //returns '55, 55'

Я упускаю что-то очевидное? Любая помощь приветствуется.


person Vranvs    schedule 18.08.2018    source источник
comment
вы не пропускаете пользователя в гейт... вы только передаете ресурс, гейт уже знает, что аутентифицированный пользователь уже Gate::allows('ability', $resourceToCheck)   -  person lagbox    schedule 18.08.2018


Ответы (1)


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

allows() функция требует два параметра: первый — это способность, а второй — массив аргументов.

public function allows($ability, $arguments = [])
{
    return $this->check($ability, $arguments);
}

Но вы называете это так:

Gate::allows('edit-litter', Auth::user(), $litter)

Это может быть причиной того, что ваш код не работает

Поэтому измените его на:

Gate::allows('edit-litter', $litter) 

и попробуйте еще раз, потому что laravel автоматически проверит его для аутентифицированного пользователя.

person Afraz Ahmad    schedule 18.08.2018
comment
рад слышать, что это помогло :) - person Afraz Ahmad; 18.08.2018