Если у вас несколько приложений, является ли хорошей практикой проектирования хранить пользователей в одной таблице со столбцом, который отличает приложение

#c# #design-patterns

#c# #шаблоны проектирования

Вопрос:

У меня есть проект C # под названием Authentication, который позволяет пользователям входить в систему и проверять свои учетные данные для входа, и если проходит, возвращает токен.

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

Комментарии:

1. Вам не нужно повторно использовать базу данных при повторном использовании кода. каждое приложение может иметь свою собственную базу данных с таблицей Users. Если вам не нужно какое-то централизованное решение?

Ответ №1:

Это зависит.

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

Я бы также разделил понятие пользователей и учетных записей. Учетная запись используется для входа в приложение и загрузки правильных разрешений. т. Е. Учетная запись контролирует, что пользователь может делать в приложении, в то время как объект «user» описывает самого пользователя.

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

Короткий ответ:

  • Разделите все, что связано с аутентификацией и авторизацией, на объект «Учетная запись».
  • Соберите все, описывающее пользователя, в объект «User».
  • Повторно используйте часть учетной записи, но создавайте «пользовательскую» часть в каждом приложении.

Ответ №2:

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

В вашем случае это означает, что одна БД для хранения данных аутентификации, затем другая БД для каждой службы с относительными данными.

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