Проектирование базы данных для доступа / управления мультиорганизацией - PullRequest
1 голос
/ 15 августа 2011

Как бы вы спроектировали базу данных для управления несколькими организациями? (т.е. 1 пользователь может владеть / управлять более чем 1 организацией)

* ** 1003 тысяча два * Пример
  • Xero (www.xero.com), вы можете войти в xero, а затем выбрать компанию в списке, которым хотите управлять. Я думаю, что в freshbook есть что-то похожее.

user_access

  • Id
  • CompanyUserId (идентификатор компании)
  • UserId (UserId, который будет управлять компанией)

USER_PERMISSION

  • Id
  • UserAccessId
  • CanViewM
  • CanEditM ....
  • CanViewN
  • CanEditN

1 Ответ

2 голосов
/ 15 августа 2011

Вы не должны смешивать пользователей и логины. Их следует рассматривать как отдельные таблицы / объекты. Одна роль в одной компании может не совпадать с другой.

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

Следовательно, у вас должны быть такие таблицы:

USER_ACCOUNT (используется для определения логинов)

  • Id
  • UserName
  • Пароль

USER

  • Id
  • AccountId (учетная запись используется для входа в систему)
  • CompanyId (компания, к которой принадлежит пользователь)

РАЗРЕШЕНИЯ

  • Id
  • Имя

USER_ALLOWED_PERMISSIONS

  • UserId
  • PermissionId

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

...