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

Я боролся с этой проблемой в течение нескольких дней, и я искал везде, но не смог найти логического решения.

Мне нужно несколько типов пользователей в моем проекте (администратор, клиент), потому чтоМне нужна совершенно другая логика для каждого типа.Поэтому я решил использовать метод multi-auth в laravel (который AFAIK является лучшим решением для этих случаев).Поэтому у меня есть несколько пользовательских классов для каждого типа (и несколько таблиц в БД), включая классы Admin и User.Классы AdminAuth и UserAuth управляют логикой входа в систему и регистрации, а маршруты обрабатываются с помощью промежуточного программного обеспечения.

До сих пор проблем не было.Проблема в том, что мне нужно использовать один пользовательский класс в других классах.Например, рассмотрим логику обмена сообщениями (и есть много подобных случаев использования):

Модель класса сообщений должна иметь:

protected $fillable = [
    'from_id', 'to_id', 'content', 'state'
];

 public function sender(){
     return $this->belongsTo(**User::class**);
 }

 public function receiver(){
     return $this->belongsTo(**User::class**);
 }
 ...

В приведенной выше модели мне нужно указать Пользователь :: класс для отправителей и получателей, которые могут быть как администраторами, так и пользователями.Так как я могу сказать Eloquent использовать обе модели.Это вообще возможно?Если нет, то каково здесь решение?

Я думал об использовании класса более высокого уровня с именем Person, например, для хранения экземпляров объекта Admin или User, но в этом случае ORM не удается получить или сохранитьпользователи из / в соответствующих таблицах автоматически.

Любое предложение с благодарностью.

1 Ответ

0 голосов
/ 22 октября 2018

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

...