Strongloop/Loopback: как войти в систему, если несколько моделей расширяют встроенную модель пользователя

Я только начал разрабатывать с помощью инфраструктуры Strongloop и увидел, что вы можете расширять базовые встроенные модели, такие как модель пользователя. Например: модель пациента может расширять модель пользователя. Таким образом, базовая информация о пользователе и услуги будут автоматически расширены из модели пользователя, и можно будет запрашивать вход в систему, выход из системы и т. д. через модель пациента (например, Patient.login(учетные данные)).

Однако, если у меня есть несколько моделей, которые расширяются от модели пользователя (например, Physicion, Admin и Patient), как выполнять удаленные методы из модели пользователя, не зная, какую из трех моделей мне нужно выполнить? Например, если у меня есть учетная запись пациента, я могу запросить Patient.login(учетные данные), и Strongloop правильно войдет в систему. С другой стороны, на странице входа в систему я не знаю, ввел ли пользователь Patient или Physicion свои учетные данные. Итак, я не знаю, какой метод входа мне нужно вызвать: если Patient.login или Physicion.login. Удаленный метод User.login в моем случае не работает. Как запросить логин, не зная заранее тип пользователя?


person Thiago Sales    schedule 26.07.2015    source источник


Ответы (2)


Если вы расширяете модель пользователя, это не имеет значения, так как все они будут искать один и тот же токен авторизации в БД и выполнять один и тот же точный код в loopback/common/models/User.js, просто они будут называться по-разному.

Но в более широком плане вы должны отслеживать, с каким типом пользователя вы имеете дело, по его идентифицирующей информации (электронная почта и т. д.), а не по подмодели/классу модели, к которой они будут обращаться. Вы должны знать это, прежде чем сделать правильный звонок.

Взгляните на ролевую модель и модель ролевого сопоставления. Например, вы можете создать роли пациента, врача и администратора, а затем сопоставить их с пользователями, а затем использовать единую модель (пользователя) для входа в систему.

Что, если у вас есть врач, который также является пациентом? Или врач, который также является администратором? С ролями вы можете управлять этим с помощью одной модели пользователя, а затем знать, какую подмодель использовать.

person notbrain    schedule 27.07.2015
comment
Но что, если у пациента, врача и администратора совершенно разные поля? Было бы правильно, если бы все эти данные хранились в одной пользовательской таблице? - person Anoop.P.A; 09.08.2015
comment
@ Anoop.PA Да, одним из способов было бы поместить все в массивную модель пользователя и разрешить пустые значения для неприменимых полей. Но говоря о совершенно разных полях, если вы имеете в виду, что у них не будет никаких общих полей (даже имя, адрес электронной почты и т. д.), что довольно редко, тогда да, они должны быть отдельными моделями. Но я рекомендую расширить модель пользователя (с помощью Person) и для этого, поскольку вы не можете легко изменить пользователя, поскольку он является частью обратной связи. Расширение пользователя дает вам аутентификацию и общие вещи. - person notbrain; 10.08.2015

Некоторое время работал с IBM-StrongLoop Loopback 3, решил создать этот стартер для создания многопользовательских моделей API. Проверьте это. Стартовый многопользовательский API. Его можно использовать абсолютно бесплатно, а также он создан, чтобы делать всю тяжелую работу за вас.

Все, что вам нужно сделать, это позволить вашим моделям CustomUser, то есть пациенту, врачу, врачу и т. д., расширить BaseUser, который присутствует в стартере. Для разрешения на основе ролей в ACL вы можете проверить пример использования стартера, Loopback Multi- Аутентификация на основе пользователей и ACL на основе ролей Вот и все...

person Chima Precious    schedule 17.01.2019