这是数据库设计还是授权/权限的责任

时间:2011-01-11 06:28:10

标签: c# database-design permissions business-logic

我正在考虑项目的权限系统,我无法决定如何组织我的权限系统。在简短的抽象形式中,我将我的问题描述为:
我应该为每个用户创建共享实体(行)并应用权限还是创建单独的实体(行)副本?

我的情况:我有2个实体

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

具有多对多的关系。允许用户修改他们创建的公司实体(拥有)。

我的问题:联系人实体(行)可以在不同用户拥有的公司之间共享,并假设两个用户都想将Contact.ContactPerson编辑为不同的值(例如,一个用户声称电话号码属于John,如果我为每个公司(以及用户)创建单独的联系人副本,这种情况可以解决,但我的业务规则不允许重复的联系人具有相同的电话号码,并且还有其他联系人属性必须与电话号码共享(根据我的业务规则)。

如何解决这种情况?

2 个答案:

答案 0 :(得分:1)

最后,您必须创建一个策略。如果发生冲突(例如版本控制),或者只有可以编辑的联系人创建者的严格策略,或者只要联系人在她的公司中,任何人都可以编辑联系人,或者使用复杂的策略,您可以应用策略进行合并评级(点)以获得像stackoverflow一样的编辑访问权限:P。

这个问题只能通过直接向客户询问他想要应用的政策来解决。

答案 1 :(得分:0)

听起来你的业务逻辑在那里发生冲突。一方面,你说两个用户可能不同意一个号码是谁的电话号码(如果两个人共用一个桌面/电话,这是完全有效的)。另一方面,您说您的业务逻辑不允许重复的电话号码。

为什么您的逻辑会坚持使用唯一的电话号码?听起来像你创造了一个不能保证唯一的PK,因此不合适。