2011-04-08 90 views
0

我正在开发一个应用程序,并在我的控制器和存储库之间使用“服务”层来执行模型/业务验证。由于这是一个多租户应用程序(使用共享数据库),因此我需要对所有操作执行权限验证。服务层功能的返回值

我不确定如何处理的一件事是返回类型,以防用户无法访问特定操作。例如,假设我有一个方法GetAccountById。通常,此方法将返回Account实体的实例(如果不存在,则返回null)。在帐户确实存在的情况下,适当的返回值是多少,但当前用户无权访问?我真的不想抛出异常,因为它似乎不适合用于其中之一。所以问题是:我如何警告我的服务层的使用者(无论是控制器还是Web服务)授权无效?我应该创建一些类型的GetAccountByIdResult类型,并在其中包含函数的结果(包括任何“错误”代码,实际实体等)?

感谢,

回答

2

是的,我在我的业务层做的实际上是始终包括“结果”对象,它包含一个错误BOOL,错误消息的集合(你可以阅读,如果Error是真的)。 ..然后实际的对象/资源

{ 
    error:true, 
    messages: ['error1','error2'], 
    value: { name:'blah' } 
} 
+0

你有一个通用的“结果”对象或许多取决于方法吗? – 2011-04-08 15:09:05

+0

它取决于涉及的技术......我通常尝试拥有一个通用的结果对象。当从javascript访问rest/json服务时,使得它非常容易,因为json是动态输入的。如果客户端是一种静态类型的语言(java,c#等),那么我将拥有一个具有“对象”值的通用类型,或者如果情况需要,则使用强类型值。通常,如果我是客户端的作者,我会使用对象,因为我很容易输出结果。但是,如果我正在为其他消费者撰稿,我通常会强烈地打字 – 2011-04-08 15:11:52

0

铭记我从来没有真正不得不这样做(我记得)... 我想这取决于你在哪里强制授权。

  • 如果你在服务级别执行它,那么你可以在那里定义它;我想你可能会有一个通用的'错误'响应和/或特定服务的特定响应。
  • 如果您在存储库级别执行它,那么它会返回任何想要的内容,并且您的服务层将不得不处理该问题并找出返回的内容 - 这将我们带回第一点。