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