我正在设计一个具有不同类型用户的课程管理系统,包括系统管理员,分支经理和分支用户。正如您所料,sysadmin可以管理所有记录,分支管理器可以管理其分支中的所有记录,分支用户只能管理其记录。
我的问题是,这个过滤应该在哪里完成?我应该在DAL层进行吗?或者只是从DAL返回所有记录,然后在其他层进行过滤?我一直在寻找有关授权的最佳实践,但我没有找到任何可以清楚解释这方面的内容。
答案 0 :(得分:2)
一般情况下,无论出于何种原因,数据库记录的选择应由数据库完成 - 这就是它的工作。
此外,
答案 1 :(得分:0)
此问题的实施级答案将在很大程度上取决于您的工具。这将是.NET,Java,PHP,Python吗?
您的DAL应该只关注返回数据并将数据提交到数据存储。您描述的过滤最好在中间层处理,具有业务逻辑。大多数查询将在登录用户的上下文中进行,以便返回相应的数据,因此在设计系统时请记住这一点。
更新:
鉴于.NET和NHibernate,NHibernate是你的ORM / DAL。理想情况下,DAL应该是一个Repository实现,允许您将数据输入和输出数据库。
设计域模型以处理用户,角色和分支之间的关系。每个实体都与其他实体有关系。这些分支的“记录”也必须建模为实体。在模型中建立关系后,您可以在检索相关实体的每个实体上设计方法。您可能会认为此模型是一种ViewModel或Controller。它的工作是明确地实现实体之间的关系,在NHibernate提供的“上方”创建一个抽象。