0

我正在使用此堆栈开发 Azure 应用程序:

(客户端)角/微风

(服务器) Web API/Breeze Server/Entity Framework/SQL Server

对于每个请求,我都想确保用户实际上有权使用服务器端代码执行该操作。我的问题是如何在 Breeze/Web API 上下文中最好地实现这一点。

最好的策略是:

  1. 修改 Web API 控制器并尝试分析 Breeze 请求的内容,然后再将其进一步向下传递?

  2. 修改 EFContextProvider 并为每个公开的方法添加授权测试?

  3. 将安全性全部移至数据库层并确保用户 GUID 和租户 GUID 是每个查询的必需参数,并且只返回相关数据?

  4. 其他一些解决方案,还是上述的某种组合?

4

1 回答 1

1

如果您使用的是 Sql Azure,那么一种选择是使用 Azure Federation 来做到这一点。

用一个非常简单的术语来说,如果您的表中有 TenantId 存储来自多个租户的数据,那么在执行 SELECT Col1 FROM Table1 之类的查询之前,您执行 USE FEDERATION... 语句以将查询结果限制为仅特定的 TenantId,并且您不需要将 WHERE TenantId=@TenantId 添加到您的查询中,

使用联邦示例:http: //msdn.microsoft.com/en-us/library/windowsazure/hh597471.aspx

请注意,在构建数据库模式时,使用 Sql Azure 联邦会附带很多字符串,我发现的关于它的最佳博客之一是http://blogs.msdn.com/b/cbiyikoglu/archive/2011/ 04/16/schema-constraints-to-consider-with-federations-in-sql-azure.aspx

于 2013-10-13T21:01:30.123 回答