我已经实现了服务类,比如说“DataSourceService”。现在我想通过 WCF 公开它并使其成为 REST。没有问题,这可以在 WCF 中轻松完成。
但是,我想说,架构问题来了。
所以假设我有一个方法:
IEnumerable<string> ReadAllInventoryItems()
我必须IEnumerable<string>
根据用户授权声明(角色或权限等)返回的问题。我可以通过在 DataSourceService 的每个方法中验证这些声明来做到这一点。像这样的东西:
IEnumerable<string> ReadAllInventoryItems()
{
var companyName = ReadCompanyNameFromAuthorisationContext();
var items = ReadAll().Where( i => i.CompanyName == companyName).ToList();
return Items;
}
我会说这种方法存在一个大问题。即:如果没有此“声明”上下文,DataSourceService 将变得不可用。当我在没有 WCF 的情况下使用它时,我必须为每个调用准备 Claims 或 UserIdentity 上下文。
所以下一步对我来说是“考虑 WCF IDispatchMessageInspector”,但后来我意识到我必须实现一个 IDispatchMessageInspector 和一个 OperationInvoker,然后我可以用某种具有权限的属性来装饰 Web 服务方法(这个属性稍后将在 OperationInvoker 中使用)。
最后我会得到:
[AuthorizationFiltering]
IEnumerable<string> ReadAllInventoryItems()
{
var items = ReadAll().Where( i => i.CompanyName == companyName).ToList();
return Items;
}
你怎么看?
我应该坚持“在 DataSourceService 的每个方法中验证这些声明”还是 WCF IDispatchMessageInspector,MethodInvoker 的故事还不错……