我应该在哪里过滤记录?

时间:2010-08-06 19:19:12

标签: nhibernate authorization

我正在设计一个具有不同类型用户的课程管理系统,包括系统管理员,分支经理和分支用户。正如您所料,sysadmin可以管理所有记录,分支管理器可以管理其分支中的所有记录,分支用户只能管理其记录。

我的问题是,这个过滤应该在哪里完成?我应该在DAL层进行吗?或者只是从DAL返回所有记录,然后在其他层进行过滤?我一直在寻找有关授权的最佳实践,但我没有找到任何可以清楚解释这方面的内容。

2 个答案:

答案 0 :(得分:2)

一般情况下,无论出于何种原因,数据库记录的选择应由数据库完成 - 这就是它的工作。

此外,

  • 您不希望不必要的记录在数据库服务器和客户端计算机之间浪费带宽。
  • 您不希望在客户端计算机上占用内存的不必要记录。
  • 您不希望客户端计算机上的内存中存在未经授权的记录,而这些记录可能会被黑客攻击。

答案 1 :(得分:0)

此问题的实施级答案将在很大程度上取决于您的工具。这将是.NET,Java,PHP,Python吗?

您的DAL应该只关注返回数据并将数据提交到数据存储。您描述的过滤最好在中间层处理,具有业务逻辑。大多数查询将在登录用户的上下文中进行,以便返回相应的数据,因此在设计系统时请记住这一点。

更新:

鉴于.NET和NHibernate,NHibernate是你的ORM / DAL。理想情况下,DAL应该是一个Repository实现,允许您将数据输入和输出数据库。

设计域模型以处理用户,角色和分支之间的关系。每个实体都与其他实体有关系。这些分支的“记录”也必须建模为实体。在模型中建立关系后,您可以在检索相关实体的每个实体上设计方法。您可能会认为此模型是一种ViewModel或Controller。它的工作是明确地实现实体之间的关系,在NHibernate提供的“上方”创建一个抽象。