Создание переменной глобальных разрешений после авторизации пользователя в Laravel

Я хотел бы установить глобальную переменную после аутентификации пользователя - назовем ее permissions. Переменная должна быть доступна в контроллерах и представлениях.

Каков наилучший способ добиться этого? Теперь в каждом методе я должен выполнять запрос к базе данных и проверять роли пользователей, что не оптимально.

Я знаю, что могу объявить метод view::share в appserviceprovider для передачи переменной в представления, но метод загрузки выполняется после аутентификации пользователя.

Обновить

Я создал BaseController, который расширяется от Controller.

Базовый контроллер:

class BaseController extends Controller {

  public $permissions;

  public function __construct() {
      $this->permissions = GroupRoles::where('id', Auth::user()->id)->first();
  }

}

Затем я пытаюсь получить доступ к переменной разрешений из UserController, которая наследуется от BaseController. Получение попытки получить доступ к не-объекту. Я думаю, это потому, что конструктор BaseController создается до промежуточного программного обеспечения.

class UserController extends BaseController {

  public function showPermissions() {
    return var_dump($this->permissions);
  }

}

Окончательное решение

Краеугольным камнем было использование $this->middleware(function ($request, $next) в BaseController.


person Martin    schedule 03.09.2017    source источник


Ответы (1)


Попробуйте это в контроллере или создайте свой собственный BaseController, затем расширьте свои контроллеры из него, и в BaseController вы можете сделать это следующим образом.

public $permissions;

public function __construct()
{
   $permissions = Permissions::all() //For example
   $this->permissions = $permissions
}

Затем вы можете получить к нему доступ с любого контроллера, как этот $this->permissions

person Petyo Tsonev    schedule 03.09.2017
comment
Я создал BaseController и конструктор с ним. Но я все еще не могу получить доступ к переменной разрешений из UserController. Я думаю, что я должен сделать что-то большее, чем это. Потому что я получаю ошибку Trying to get property of non-object. Так что проблема по-прежнему связана с аутентификацией. - person Martin; 03.09.2017
comment
Но вы пытаетесь установить разрешение из пакета? Пользовательский контроллер должен расширять BaseController, чтобы вы могли его получить. Или сначала попробуйте сделать дамп переменной в конструкторе, чтобы вы могли быть уверены, что нужные данные есть. - person Petyo Tsonev; 03.09.2017
comment
UserController расширяет BaseController. BaseController расширяет контроллер. Я получаю эту ошибку, потому что метод построения вызывается до загрузки метода Auth или я не знаю, как его вызвать. BaseController имеет следующий код в конструкторе: $this->permissions = GroupRoles::where('id', Auth::user()->id)->first(); - person Martin; 03.09.2017