условное обозначение типа пользователя при входе в систему - PullRequest
0 голосов
/ 22 ноября 2018

Я хочу сделать условие при входе в систему.Система будет иметь разных типов пользователей.

Пример: администратор, менеджер, пользователь.

Я испробовал все приведенные решения, но он перенаправляет пользователя на одну и ту же страницу..

База данных: Таблица - пользователи: столбец: роль.

Условие будет основано на роли при регистрации.

Вот мойкод:

Logincontroller.php

protected $redirectTo = '/dashboard';

public function __construct() {
  $this->middleware('guest')->except('logout');

  $this->redirectTo = '/dashboard';

  $user = \Auth::user();
  if ( ($role->admin() ) {
    // an admin
    $this->redirectTo = '/admin';
  } elseif ( ($role->manager() ) {
    // it's a manager
    $this->redirectTo = '/manager/home';
  }
  else {
    // it's a user
    $this->redirectTo = '/dashboard';
  }
}

Заранее спасибо!

Ответы [ 4 ]

0 голосов
/ 27 ноября 2018

Спасибо всем за решения.Попробовав ваш код, я немного изменил его и получил решения (но может возникнуть проблема позже).

 use Illuminate\Http\Request;

protected function authenticated($request, $user)
{
if($user->position = 'manager') {
    // change the redirectTo variable as needed
    $this->redirectTo = ('/manager/home');
} 
else //($user->position = 'admin')
{
    // change the redirectTo variable as needed
    $this->redirectTo = ('/admin/dashboard');
}
 return redirect()->intended($this->redirectPath());
}
0 голосов
/ 22 ноября 2018

Я предлагаю сделать isAdmin() и isManager() в пользовательской модели.Сделайте что-то вроде этого:

В App\User.php

const ADMIN_TYPE = 'admin';
const MANAGER_TYPE = 'manager';

public function isAdmin() {
     return $this->role === self::ADMIN_TYPE;
 }

public function isManager() {
     return $this->role === self::MANAGER_TYPE;
} 

В LoginController

use AuthenticatesUsers;

protected function authenticated() {

     if (auth()->user()->isAdmin()) {
     // an admin
         $this->redirectTo = '/admin';
     } 
}
0 голосов
/ 22 ноября 2018

Вы не можете добавить логику перенаправления в конструктор, потому что она будет вызвана до того, как будет предпринята попытка аутентификации пользователя, поэтому она всегда будет "/dashboard".

. Вы можете добавить метод authenticated() вВаш LoginController, этот метод будет запущен после успешной аутентификации пользователя.

protected function authenticated(Request $request, User $user)
{
    if ($user->admin()) {
        // an admin
        $redirect = '/admin';
    } elseif ($user->manager()) {
        // it's a manager
        $redirect = '/manager/home';
    } else {
        // it's a user
        $redirect = '/dashboard';
    }
    return redirect($redirect);
}
0 голосов
/ 22 ноября 2018

Почему бы не перейти на пользовательское промежуточное ПО для аутентификации и фильтрации пользователя

Промежуточное ПО

зарегистрироваться в ядре и затем применить свою логику в функции дескриптора промежуточного ПО

И согласно вашей логике, пожалуйста, подтвердите, правильно ли вы проверяете свою роль, потому что это может привести к тому, что она окажется в другом состоянии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...