Собственная мультиаутентификация Laravel 5.5 с несколькими модельными отношениями

Я хочу использовать нативную мультиаутентификацию Laravel для многих типов пользователей, таких как студенты, школы и администраторы.

У меня есть 5 таблиц для этого, например:

  • user_types: хранит типы пользователей
  • пользователи: хранит учетные данные для входа
  • admins: хранит другие данные для администраторов
  • студенты: хранит другие данные для студентов
  • школы: хранит другие данные для школ

Я долго борюсь за это. Может ли кто-нибудь дать мне идею, как этого добиться? Заранее спасибо.

Разница в том, что я сохраняю электронную почту/пароли для всех пользователей в таблице «пользователь» и другую информацию в соответствующих таблицах.


person bhattraideb    schedule 13.11.2017    source источник
comment
Привет @ImAtWar, спасибо за ваш ответ. Разница в том, что я сохраняю электронную почту/пароли для всех пользователей в таблице пользователей и другую информацию в соответствующих таблицах. Итак, когда я пытаюсь войти в систему, я получаю сообщение SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец «электронная почта» в «предложении where» (SQL: выберите * из admins, где email является нулевым пределом 1) ошибка, поскольку адрес электронной почты и пароль хранится в таблице пользователей.   -  person bhattraideb    schedule 13.11.2017
comment
Geat @Tushar, я искал точно такой же. Спасибо.   -  person bhattraideb    schedule 13.11.2017
comment
@bhattraideb хорошо, я преобразовываю свой комментарий в ответ, так что вы можете принять это.   -  person Tushar    schedule 13.11.2017


Ответы (1)


Вы должны хранить все свои типы пользователей в одной таблице пользователей, а затем создавать разные роли (пользователи, администраторы, студенты, школы и т. д.) в таблице ролей. Используйте сводную таблицу, чтобы установить связь между пользователем и ролями (user_roles).

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

https://www.5balloons.info/user-role-based-authentication-and-access-control-in-laravel/

person Tushar    schedule 13.11.2017
comment
Я выполнил ваши шаги, но для каждого пользователя после входа в систему он переходит к домашнему виду по умолчанию. Как обрабатывать маршрутизацию? Например, когда вы вошли в систему как администратор, он должен перейти на панель администратора и так далее для других пользователей. Кроме того, при выходе из школы он должен перенаправлять на представление входа в школу. - person bhattraideb; 13.11.2017
comment
Это зависит от того, к какому разделу контроллера вы пытаетесь получить доступ. Допустим, у вас есть раздел администратора yourapp.com/admin. Если вы настроите AdminController с правильным промежуточным программным обеспечением, когда пользователь попытается получить доступ к домашней странице администратора, он должен сначала увидеть страницу входа в систему, и если у него есть доступ после входа в систему, он сможет увидеть страницу входа. - person Tushar; 14.11.2017
comment
Моя промежуточная программа CheckRole не вызывается. Я пытаюсь проверить роль и перенаправить администратора на панель администратора из этого промежуточного программного обеспечения. Вот мое промежуточное ПО: дескриптор публичной функции ($ request, Closure $ next, $ role) { var_dump ((Auth:: User())); умереть; if (! $request-›user()-›hasRole($role)) { abort(401, 'Это действие неавторизовано'); } вернуть $следующий($запрос); } - person bhattraideb; 14.11.2017