从Azure中的简单表/视图中仅获取当前经过身份验证的用户的数据

时间:2017-01-02 16:59:07

标签: node.js azure azure-sql-database azure-mobile-services

使用Microsoft Azure,我使用简易表(node.js后端)创建了一个数据库。我有几张桌子和一张视图。

有一个技巧可以使视图像我已经完成的一个简单的表格一样工作。

问题: 使用此代码从视图中读取数据时,我会收到所有数据 - 包括其他用户的数据。

 table.read(function (context) {
 return context.execute();
 });

这是有道理的,因为我没有指定我只想要经过身份验证的用户的数据。

使用此代码时,我没有数据:

    // READ operation
  table.read(function (context) {
  context.query.where({ userId: context.user.id });
  return context.execute();
});

将上述代码用于实际表而非视图效果非常好。

从日志文件:

    2017-01-02T18:52:00.945Z - silly: Executing SQL statement SELECT TOP 3 * FROM [dbo].[ClassData] WHERE (([userId] = @p1) AND ([deleted] = @p2));  with parameters [{"name":"p1","pos":1,"value":"sid:REMOVED"},{"name":"p2","pos":2,"value":false}]

2017-01-02T18:52:00.945Z - silly: Read query returned 2 results

sprintf() will be removed in the next major release, use the sprintf-js package instead.
2017-01-02T18:52:01.867Z - silly: Executing SQL statement SELECT TOP 10 * FROM [dbo].[StacksNamesView] WHERE (([userId] = @p1) AND ([deleted] = @p2)) ORDER BY [createdAt];  with parameters [{"name":"p1","pos":1,"value":"sid:REMOVED"},{"name":"p2","pos":2,"value":false}]

2017-01-02T18:52:01.883Z - debug: SQL statement failed - Invalid column name 'userId'.: SELECT TOP 10 * FROM [dbo].[StacksNamesView] WHERE (([userId] = @p1) AND ([deleted] = @p2)) ORDER BY [createdAt];  with parameters [{"name":"p1","pos":1,"value":"sid:REMOVED"},{"name":"p2","pos":2,"value":false}]

更新

创建Azure App Service EasyTables时,“userId”列自动成为每个表的一部分。但是,通过Azure门户查看架构时,它不可见。这就是我的困惑所在。

将视图用作EasyTable并且需要“隐藏”userId列时,请确保将其选为视图的一部分!只要您的其他EasyTable正在执行此帖子中的第二个代码块等查询,这将有效。

0 个答案:

没有答案