我正在使用此堆栈开发Azure应用程序:
(客户)Angular / Breeze
(服务器)Web API / Breeze Server / Entity Framework / SQL Server
对于每个请求,我想确保用户实际上拥有使用服务器端代码执行该操作的授权。我的问题是如何在Breeze / Web API上下文中最好地实现它。
是最好的策略:
修改Web API控制器并尝试分析其内容 微风请求在将它传递到链条之前进一步?
修改EFContextProvider并添加授权测试 每种方法都曝光了吗?
将安全性全部移动到数据库层中,并确保每个查询都需要用户GUID和租户GUID参数,并且只返回相关数据?
其他一些解决方案,或上述的一些组合?
答案 0 :(得分:1)
如果您使用的是Sql Azure,那么一个选项就是使用Azure Federation来实现这一目标。
在一个非常简单的术语中,如果您的表中有TenantId存储来自多个租户的数据,那么在执行SELECT Col1 FROM Table1之类的查询之前,您执行USE FEDERATION ...语句以将查询结果限制为特定的TenantId只是,您不需要在查询中添加WHERE TenantId = @ TenantId,
USE FEDERATION示例:http://msdn.microsoft.com/en-us/library/windowsazure/hh597471.aspx
请注意,在构建数据库模式时,使用Sql Azure Federation会附带大量字符串,这是我发现的最佳博客之一http://blogs.msdn.com/b/cbiyikoglu/archive/2011/04/16/schema-constraints-to-consider-with-federations-in-sql-azure.aspx。