将RavenDB用于具有复杂用户对象权限模型的解决方案

时间:2014-04-15 08:48:47

标签: .net database-design architecture ravendb nosql

我们有一个应用程序,目前建立在具有“相当”复杂的数据权限模型的SQL Server数据库上。

我们的应用程序的核心是一个名为Record的实体。用户是否可以查看记录取决于用户自己,他们所在的工作组以及他们所在的组织。

在下图中,登录的User可以看到他们被直接分配到的记录,或者他们是分配记录的工作组的一部分,或者他们是工作组的一部分分配记录的组织。

enter image description here

这在“SQL + NHibernate”的土地上有点痛苦,因为有一些混乱的联接和工会被用来获得我需要的结果。这只是在应用程序中以这种方式许可的数据的一个示例。

我只是想知道这种类型的模型对于NoSQL / RavenDB对象层次结构是否合适,以及是否存在可能需要的任何性能考虑/对象模型重新架构。

1 个答案:

答案 0 :(得分:1)

请注意,这个答案是不完整的,因为我试图发现更多关于这个问题的答案

我已经编写了一些代码来尝试从呈现的内容中找出1对多的关系。

目前这是的结构

public class Organisation
{
   public List<Workgroup> Workgroups { get; set; }
   public List<OrganisationRecord> Records { get; set; }
}

public class Workgroup 
{
   public List<User> Users { get; set; }
   public List<WorkgroupRecord> Records { get; set; }
}

public class User
{
   public List<UserRecord> Records { get; set; }
}

根据我的理解 - 记录有三种形式:

  • OrganisationRecord
  • WorkgroupRecord
  • UserRecord

这些看起来像Table Per Hierarchy

public abstract class Record { }
public class OrganisationRecord : Record {}
public class WorkgroupRecord : Record {}
public class UserRecord : Record {}