как делать синглы и входы в разные группы пользователей - PullRequest
0 голосов
/ 31 января 2019

Я занимаюсь разработкой приложения для своего колледжа, и есть разные типы пользователей, которые называются студентами, учителями, учителями и т. Д. Когда они входят в систему, как я узнаю, что учитель вошел в систему или студент вошел в систему?Есть ли в firestore какая-либо функция для регистрации и входа на основе ролей?

Я думал, что когда учитель подпишется, я добавлю конец ее тега uid.username, что если во время регистрации имя пользователя будет «DANIEL»,Я добавлю tea для учителей и stu для учеников в конце названия, которое они предоставили.

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

Есть ли лучший способ сделать это?

во время подписания пользователь вводит свое имя пользователяпример: "daniel", я обновлю это имя пользователя в uid.username, например, "daniel-stu" (если студент зарегистрировался), "daniel-tea", если techer зарегистрируется.

1 Ответ

0 голосов
/ 31 января 2019

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

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

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

Admin SDKможет установить дополнительные так называемые утверждения для профиля пользователя , которые клиентский код не может изменить.Такие утверждения относятся к вещам, которые влияют на разрешения пользователя, например, если пользователь является администратором или к какой роли / группе принадлежат ваши пользователи.Это звучит довольно близко к тому, что вы описываете, поэтому также может быть использовано.И на этот раз только ваш код, работающий в доверенной среде, сможет это сделать.

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

Подробнее об этом см.

...