Состояние в laravel 5 Middleware всегда ложное

Я пытаюсь привести в состояние Middleware,

Вот мой сценарий

if (auth()->check() && auth()->user()->type == 'TP001') {
    $menu->add("User Control",array('nickname' => "user",'class'=>'treeview'))
    ->append(' <b class="caret"></b>')
    ->prepend('<span class="glyphicon glyphicon-user"></span> ');

    $menu->user->add('Daftar User','user/list');
    $menu->user->add('Tipe User','user/type');
} else {
    /* Some code here...*/
}

Сценарий выше я не могу увидеть меню с условием, даже если я уже захожу с 'TP001' (всегда в другом), затем я пытаюсь исправить свой код с этим

auth()->user()->isDeveloper()

Моя модель

public function isDeveloper()
{
    return ($this->type == 'TP001');
}

Но все еще не работает, есть ли способ дать условие, как указано выше, но в правильной форме? Заранее спасибо и извините за мой плохой английский.

Мое ядро

  protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
        \App\Http\Middleware\Frontend::class,
  ];

3 ответа

Решение

Ядро промежуточного программного обеспечения имеет это $middleware вы опубликовали с промежуточным программным обеспечением, которое выполняется в каждом запросе, но оно запускается до промежуточного программного обеспечения маршрута (которое вы выбираете в определении маршрутов).

Вы, вероятно, используете группу промежуточного программного обеспечения "web". Попробуйте добавить свое промежуточное ПО в конце. Я думаю, что по умолчанию в Laravel 5.4:

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        // \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
        \App\Http\Middleware\Frontend::class, // <-- your middleware at the end
    ],
    'api' => [
        'throttle:60,1',
        'bindings',
    ],
];

Таким образом, вы знаете, что ваше промежуточное ПО будет работать после других (того, которое запускает сеанс и проверяет аутентификацию)

Вы можете поместить свое пользовательское промежуточное ПО в защищенный массив $routeMiddleware = [ ] в файле ядра следующим образом

$routeMiddleWare = ['frontend' => \App\Http\Middleware\Frontend::class]

После этого вы сможете получить доступ к своей проверке Auth:: и не забудьте поставить

Route::group(['middleware' => ['frontend']], function() { // your routes will go here.. });

Вы можете получить текущего пользователя в любом блейд-файле следующим образом:

{{ Auth::user()->name }}

В вашем клинке сделайте это:

@if(Auth::check() && Auth::user()->type == 'TP001')
     /* Some code here...*/
@endif

В вашем промежуточном программном обеспечении сделайте это согласно вашему требованию!:

if (\Auth::check() && \Auth::user()->type == 'TP001') { 
     $menu->add("User Control",array('nickname' => "user",'class'=>'treeview')) 
    ->append(' <b class="caret"></b>') 
    ->prepend('<span class="glyphicon glyphicon-user"></span> '); 

    $menu->user->add('Daftar User','user/list'); 
    $menu->user->add('Tipe User','user/type'); 
    } else { 
       /* Some code here...*/ 
}
Другие вопросы по тегам