2017-02-17 5 views
1

У меня есть Board.php модель с методом checkViewAccess()Authorization от модели

т.е.

@if($board->checkViewAccess()) 
    render board 
@endif 

Он делает несколько проверок, и на последней проверки он должен вызвать метод политики, чтобы определить разрешение для пользователь.

  • В лезвии, @can('view', $board) работает
  • В контроллерах $this->authorize('view', $board) работает

Но я не могу за жизнь мне найти любой способ вызвать авторизацию политики от Board модели

Что я пробовал:

  • Gate::check('view', $this) // Нестатический метод, который в порядке, не ожидал, что он сработает
  • auth()->user()->can('view', $this) // Это даже не касается политики и возвращает false, независимо от того, что я возвращаю из политики. Даже если я просто вернусь true в методе политики before(), это значение false. Laravel документы утверждают, что метод can() доклада доступен на объекте пользователя
  • $user->can('view', $this); // Думая, что это была проблема с Идент фасадом, я извлекаться пользователем непосредственно из базы данных, и он до сих пор не попал в политике

Итак, как я могу это достичь? Как я могу получить доступ к авторизации laravels из модели?

+0

вопрос Вам нужно спросить себя: «Зачем мне это нужно в модели?» и тогда «есть ли лучшее место, где я мог бы это сказать?» – Samsquanch

ответ

0

Оказывается, это был Laratrust пакет, который использует метод can() в черте, так что я не могу добавить свой собственный Authorizable черта моей модели пользователя

Fix:

use LaratrustUserTrait; 
use Authorizable { 
    LaratrustUserTrait::can insteadof Authorizable; 
    Authorizable::can as authorize; 
} 
+0

Если вы решили свои проблемы, вы можете принять свой собственный ответ;) – Spholt

+0

Придется подождать несколько дней, прежде чем это позволит мне – Pistachio