Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当所有内容都与nhibernate(orm)中的用户相关时管理类_C#_Asp.net_Nhibernate_Hibernate_Orm - Fatal编程技术网

C# 当所有内容都与nhibernate(orm)中的用户相关时管理类

C# 当所有内容都与nhibernate(orm)中的用户相关时管理类,c#,asp.net,nhibernate,hibernate,orm,C#,Asp.net,Nhibernate,Hibernate,Orm,首先,我有三个实体 用户、角色、项目 一个用户可以有多个角色。 将项目分配给一个或多个角色 因此,用户将有权访问一组不同的项 现在有几种方法可以让我看到这一点 在用户上有一个集合,该集合通过多对多关联具有角色。然后,此集合中的每个角色都有自己的项目集合。因此,对于每个用户,我必须获取用户(使用nhib并获取角色和项目),然后对每个角色中的项目执行selectMany以获取用户的所有项目,或者执行几个foreach以将数据移植到视图或dto模型 创建一个db触发器以自动插入到另一个表中,该表仅具有

首先,我有三个实体

用户、角色、项目

一个用户可以有多个角色。 将项目分配给一个或多个角色

因此,用户将有权访问一组不同的项

现在有几种方法可以让我看到这一点

  • 在用户上有一个集合,该集合通过多对多关联具有角色。然后,此集合中的每个角色都有自己的项目集合。因此,对于每个用户,我必须获取用户(使用nhib并获取角色和项目),然后对每个角色中的项目执行selectMany以获取用户的所有项目,或者执行几个foreach以将数据移植到视图或dto模型

  • 创建一个db触发器以自动插入到另一个表中,该表仅具有用户和项目之间的关系,因此在我的用户实体上,我只有一个项目集合,其中所有项目都已分配给我

  • 还有一些我还没想到的方法,因为我对nHibernate还不熟悉

  • 现在我知道扳机感觉不对劲,但我不知道该怎么做。我们后面还有一些层次结构,其中一个用户可能负责一组用户。如果有人能在nhibernate或其他orm中阐明他们是如何处理这些场景的,那将是非常好的,或者指出一个方向

    我知道,在过去,您必须将所有组合输入到一个表中,以便查询工作,但当您知道sql时,这并不太糟糕

    如果你需要任何其他信息,请告诉我。
    干杯

    看看codeplex。它是ASP.Net成员身份的一个实现。因此,它有角色、用户和应用程序。这可能会给您一些关于如何继续的想法。

    逻辑映射是用户被分配到许多角色(如果您确实需要跟踪,则反向存在角色有许多用户),并且项目对许多角色可见(同样,只有当您确实需要跟踪时,才应创建反向)

    Ayende通过Rhino安全解决了这个问题。看看他所有关于它的博客帖子。本质上,他使用NHibernate拦截器来扩展任何带有安全信息的查询,这意味着一旦您设置了权限,它“就可以工作”,您就不必担心在查询中添加安全问题

    如果不想使用此选项检索/显示给定用户的所有项目,则需要选择该用户所属角色可见的所有项目:

  • 查找当前用户拥有的所有角色
  • 查找包含用户角色列表的所有项目

    var roleIds=已分离的标准。对于 .Add(Restrictions.IdEq(currentUser.Id)) .CreateCriteria(“角色”) .SetProjection(projects.Id)

    var items=session.CreateCriteria() .CreateCriteria(“VisibleTo”) .Add(子查询.PropertyIn(“Id”,roleIds)) .List()


  • 从我的头顶上注销,因此可能需要进一步调整。

    澄清:您是否可以为实体添加额外的约束,以将多对多关系减少为一对多?例如,定义项目以特定方式映射到角色。您使用的是哪种查询API?林克?