繁体   English   中英

数据访问库:如果不允许访问或未找到数据,返回什么?

[英]Data Access Library: What to return if access isn't allowed or data isn't found?


我正在为基于小部件的报告应用程序构建 DAL,它的设计方式是用户可以选择、配置和部署报告“小部件”到他们的主屏幕。 小部件可以报告各种公司数据——站点、品牌、员工等。

虽然所有用户都可以访问所有小部件/报告,但所有用户均无权访问所有数据。 如果我在 A 公司工作,我无法查看 B 公司的销售报告或 C 公司推销员的员工考勤数据,但是我可以配置这样的报告并将其添加到我的“仪表板”中。

在运行时,中间“DataService”class 负责检查用户的凭据,如果允许访问,则将适当的 object 集合返回给客户端。

在初始构建中,如果不允许访问数据,我只返回一个空列表,但如果报告没有返回数据(这可能发生),这也是我所做的。 如果用户无权查看数据,我想在前端显示“拒绝访问”消息,但显然,如果我在任何一种情况下得到的只是一个空集合,则无法知道这是否是因为权利不足或没有数据。

如果您能提出一种解决此问题的编码方式,我将不胜感激,我的第一个想法是将凭证检查移至另一个 object 中,后者又调用数据访问 class 但时间限制意味着这不是一个选项。

我唯一能想到的与我所学的一切背道而驰的事情是,如果未授予访问权限,则抛出一个自定义异常,例如 InsufficientApplicationPrivilegeException,但这闻起来很糟糕。

谢谢阅读。

我认为你有几个选择。 一种是制作您的数据服务 class 返回的复合 object。 复合 object 看起来像这样:-

class DataResult<T>
{
   IEnumerable<T> Data;
   Result ServiceResult;
}

ServiceResult 包含有关您的服务调用结果的元数据 - 它可以是一个枚举,其中包含例如 Success、AuthenticationFailure 等。然后您可以打开它以执行不同的行为。

另一种选择可能是使用 NullObject 模式,该模式在视图中显示单个数据项,而不是实际数据,它仅显示 object 的显示属性的“拒绝访问”。 这种方法的优点是您的前端不需要任何条件逻辑等; 但是,如果您想显示特定的消息框或类似内容,而不仅仅是在小部件中显示虚拟数据行,那么这可能不合适。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM