2011-01-11 3 views
1

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

Моя ситуация: У меня есть 2 объектов

Company 
{ 
    [PK] 
    Id, 
    Name, 
    Contacts, 
    OwnerUser 
}, 
Contact 
{ 
    [PK] 
    Phone, 
    ContactPerson 
} 

, которые имеют много-ко-многим. Пользователям разрешается изменять фирму, созданную ими (собственностью).

Моя проблема: контактную сущность (строку) можно разделить между компаниями, принадлежащими другим пользователям, и предположим, что оба пользователя хотят изменить Contact.ContactPerson на другое значение (например, один пользователь утверждает, что номер телефона принадлежит Джону , и другое, что это номер Тома), эту ситуацию можно решить, если я создам отдельную копию Contact для каждой Компании (и, следовательно, пользователя), но мои бизнес-правила не позволяют дублировать Контакты с тем же номером телефона, а также другие свойства Contact которые должны быть разделены (согласно моим бизнес-правилам), кроме номера телефона.

Как разрешить эту ситуацию?

ответ

1

В конце концов вы должны создать политику. вы можете применить политику к объединению при возникновении конфликта (например, в управлении версиями) или строгую политику, которую может редактировать только создатель контакта, или кто-либо может редактировать контакт, если контакт находится в ее компании, или сложная политика, использующая рейтинг (точка), чтобы получить доступ к редактированию как stackoverflow: P.

и эти проблемы могут быть решены только с запросом непосредственно клиенту, какой политикой он хочет применить.

0

Похоже, что ваша бизнес-логика находится в конфликте. С одной стороны, вы говорите, что два человека могут не согласиться с тем, у кого номер телефона, номер (что совершенно справедливо, если двое людей разделяют стол/телефон). С другой стороны, вы говорите, что ваша бизнес-логика не позволяет дублировать номера телефонов.

Почему ваша логика настаивает на уникальных телефонных номерах? Мне кажется, что вы создали ПК, который не гарантированно будет уникальным, а потому неприемлем.

+0

Телефон является уникальным и общим, потому что он содержит свойства, которые должны быть доступны для всех компаний, у которых есть этот номер телефона. В противном случае, когда какое-либо свойство телефона изменится (предположим некоторый флаг), нам нужно будет найти все экземпляры телефона в БД и обновить этот флаг \ property. –

+0

Хорошо; в этом случае вы правы, когда говорите, что вам следует отделить ContactPerson и номер телефона - они являются отдельными объектами. Тем не менее, ваше требование о том, что контакты не могут иметь повторяющиеся номера телефонов, не имеет смысла в этом случае, так как это будет внешний ключ, связывающий несколько контактов с одним номером телефона. – kander

Смежные вопросы