【发布时间】:2011-10-03 10:59:48
【问题描述】:
我正在为基于小部件的报告应用程序构建 DAL,它的设计方式使用户可以选择、配置报告“小部件”并将其部署到他们的主屏幕。小部件可以报告各种公司数据 - 网站、品牌、员工等。
虽然所有用户都可以访问所有小部件/报告,但并非所有用户都有权访问所有数据。如果我在 A 公司工作,我无法查看 B 公司的销售报告或 C 公司推销员的员工考勤数据,但是我可以配置这样的报告并将其添加到我的 '仪表板”。
在运行时,中间“DataService”类负责检查用户的凭据,如果允许访问,则将适当的对象集合返回给客户端。
在初始构建中,如果不允许访问数据,我只是返回了一个空列表,但如果报告没有返回任何数据(这可能会发生),我也会这样做。如果用户无权查看数据,我想在前端显示“拒绝访问”消息,但显然,如果我在任何一种情况下得到的只是一个空集合,则无法知道这是否是因为权利不足或没有数据。
如果您能提出一种解决此问题的编码方法,我将不胜感激,我的第一个想法是将凭据检查移至另一个对象,该对象又调用数据访问类,但时间限制意味着这不是一个选项.
我唯一能想到的,与我所学的一切背道而驰的是,抛出一个自定义异常,例如InsufficientApplicationPrivilegeException 如果未授予访问权限,但这闻起来很糟糕。
感谢阅读。
【问题讨论】:
-
我认为,如果您将 DAL 视为一个独立的实体,并想象在所有消费者都是由第三方完成的工作时,这是您的唯一责任,您可能会提出拒绝访问的例外 -大多数框架都会。但是,如果您想避免 异常逻辑,那么提供功能来帮助消费者确定他们是否有足够的数据访问权限会很有帮助——尽管这听起来更像是一个业务逻辑问题,就是这样控制访问?
-
我希望将授权作为一个单独的步骤,但正如我所提到的,这一切都必须一次性完成。在这种情况下,您是否认为我可以证明打破仅在出现问题时才使用异常的规则而不是作为控制程序执行的一种方式?另一个担忧是,组织中的每个人都会在他们的仪表板上使用我的小部件,鉴于高可见性,性能是一个主要因素。我正在使用积极缓存的数据,但担心引发异常的相对成本较高。你对此有看法吗?
标签: c# architecture data-access-layer privileges