Является ли ответственность за дизайн базы данных или авторизацию / разрешения
Я думаю о системе разрешений для моего проекта и не могу принять решение о том, как организовать свою систему разрешений. В краткой абстрактной форме я бы описал свой вопрос так:
Должен ли я создавать общие объекты (строки) и применять разрешения или создавать отдельную копию объекта (строки) для каждого пользователя?
Моя ситуация: у меня есть 2 лица
Company
{
[PK]
Id,
Name,
Contacts,
OwnerUser
},
Contact
{
[PK]
Phone,
ContactPerson
}
которые имеют отношения многие ко многим. Пользователям разрешено изменять сущность Компании, которую они создали (свою).
Моя проблема: сущность контакта (строка) может быть разделена между компаниями, которые принадлежат разным пользователям, и предположим, что оба пользователя хотят изменить значение Contact.ContactPerson на другое значение (например, один пользователь утверждает, что телефон принадлежит Джону, а другой - что это номер Тома), эту ситуацию можно решить, если я создам отдельную копию Контакта для каждой Компании (и, следовательно, пользователя), но мои бизнес-правила не допускают дублирования Контактов с одним и тем же номером телефона, и есть другие свойства Контакта, которые должны быть общими. (согласно моим деловым правилам) помимо номера телефона.
Как решить эту ситуацию?
2 ответа
В конце концов, вы должны создать политику. Вы можете применить политику к слиянию, если возник конфликт (например, в управлении версиями), или строгую политику, которую может редактировать только создатель контакта, или любой может редактировать контакт, пока контакт находится в ее компании, или сложную политику, которая использует рейтинг (точка), чтобы получить доступ к редактированию, как stackru:P.
и только эту проблему можно решить, спросив непосредственно у клиента, какую политику он хочет применить.
Похоже, ваша бизнес-логика находится в конфликте там. С одной стороны, вы говорите, что два пользователя могут не согласиться с тем, чей номер телефона является номером (что совершенно справедливо, если два человека используют один рабочий стол / телефон). С другой стороны, вы говорите, что ваша бизнес-логика не допускает дублирования телефонных номеров.
Почему ваша логика настаивает на уникальных телефонных номерах? Мне кажется, что вы создали ПК, который не гарантированно уникален и поэтому не подходит.