Nhibernate 我应该在哪里过滤记录?
我正在设计一个课程管理系统,它有不同类型的用户,包括系统管理员、部门经理和部门用户。正如您所料,系统管理员可以管理所有记录,分支管理器可以管理其分支的所有记录,分支用户只能管理其记录Nhibernate 我应该在哪里过滤记录?,nhibernate,authorization,Nhibernate,Authorization,我正在设计一个课程管理系统,它有不同类型的用户,包括系统管理员、部门经理和部门用户。正如您所料,系统管理员可以管理所有记录,分支管理器可以管理其分支的所有记录,分支用户只能管理其记录 我的问题是,应该在哪里进行过滤?我应该在DAL层做吗?或者只是从DAL返回所有记录,然后在其他层进行过滤?我一直在到处寻找关于授权的最佳实践,但我没有找到任何东西可以清楚地解释这一方面。一般来说,数据库记录的选择,无论出于何种原因,都应该由数据库完成——这就是它的工作 此外 您不希望不必要的记录浪费数据库服务器和
我的问题是,应该在哪里进行过滤?我应该在DAL层做吗?或者只是从DAL返回所有记录,然后在其他层进行过滤?我一直在到处寻找关于授权的最佳实践,但我没有找到任何东西可以清楚地解释这一方面。一般来说,数据库记录的选择,无论出于何种原因,都应该由数据库完成——这就是它的工作 此外
- 您不希望不必要的记录浪费数据库服务器和客户机之间的带宽
- 您不希望不必要的记录占用客户机上的内存
- 您不希望未经授权的记录在客户端计算机的内存中,因为它们可能被黑客攻击
设计域模型以处理用户、角色和分支之间的关系。每个实体都与其他实体有关系。这些分支的“记录”也必须建模为实体。一旦在模型中建立了关系,就可以在每个实体上设计检索相关实体的方法。您可能认为这个模型是一种视图模型或控制器。它的工作是显式地实现实体之间的关系,在NHibernate提供的抽象之上创建一个抽象。这是使用NHibernate进行DAL的.NET。我不知道的是,我是否应该让DAL知道执行查询的用户。一般来说,DAL应该不知道数据的性质,只知道如何将数据进出数据库。您应该在DAL上有一个域模型,它可以理解用户是什么,以及他们应该访问哪些对象。您将如何实现像GetRegistrationsForCourse这样的方法?返回的记录应根据调用它的用户进行筛选。请参阅我的更新:课程实体应具有注册集合。注册实体应具有课程集合。您需要在NHibernate提供的抽象层的基础上增加一个抽象层,您可以在整个应用程序中使用该抽象层与实体进行交互。