2015-11-16 4 views
2

Я использую функции авторизации Laravel 5.1, задокументированные here. Мои контроллеры реализуют AuthorizesRequests, и у меня есть свои политики, которые настраивают политику подключения к их моделям для создания ACL. В моих контроллерах я проверяю авторизацию в каждом методе. Например, в «Агентском контролере» метод «update» вызывает $ this-> authorize ($ agency), который затем проверяет мой метод обновления AgentPolicy, чтобы знать, или нет, текущему пользователю разрешено обновлять агентство, как описано в документации. Это работает так, как я этого хочу.Laravel 5.1 index & create authorization

Однако, я не могу понять, как использовать авторизацию для других методов, таких как index() и create(), где не используется конкретная модель. Вызов $ this-> authorize ('index'), кажется, возвращает false, даже если у меня есть функция index ($ user) в моем классе политики, которая возвращает true.

Я новичок в использовании помощников авторизации Laravel, поэтому я мог бы пойти об этом неправильно или пропустить что-то очевидное. Любая помощь, указывающая мне в правильном направлении, была бы оценена гретали!

ответ

4

Вы должны передать его имя класса модели вы не проверять:

$this->authorize('index', Agency::class); 
+0

Это не работает для меня –

0

С некоторой помощью кого-то из группы Laravel slack я смог найти ответ на это сам.

Без экземпляра модели вызовы authorize() не могут отображать правильные политики. Но просто передавая им класс, он способен и работает.

Например, вместо вызова $ this-> authorize ('index') в методе индекса моего контроллера я теперь вызываю $ this-> authorize ('index', Agency :: class), чтобы дать ему правильная модель для использования.

+1

Нет необходимости создавать новый экземпляр 'Agency'. См. Мой ответ. –

+0

Да, но почему-то этот ответ является лишь частью вашего вопроса. Ответ на этот вопрос - это синтаксис, но как вы справляетесь с этим в своем контроллере и политике? Метод индекса должен получить такую ​​коллекцию, как '$ agents = Agency :: get();' Тогда у вас есть коллекция вместо одной модели. Вы перебираете и авторизуете каждый? Как насчет создания, где у вас нет модели? – hogan

+0

На самом деле я понял это неправильно. Скорее всего, это область запроса, и авторизация должна просто проверить, разрешено ли пользователю вообще использовать этот метод. Принятый ответ для этого также верен в моем случае. – hogan

Смежные вопросы