首页 > 解决方案 > Azure Cosmos DB - 每个用户访问不同的数据 (SQL)

问题描述

我是网络开发的新手,所以这个问题可能是微不足道的。

我有一些物理设备,它们会将湿度(和其他东西)传输到 Azure Cosmos DB。我希望用户只能阅读他们的设备(通过网络应用程序中的图表)。所有设备都以相同的集合结束。

我通过以下方式在 Azure 中设置了一个系统:

设备 -> Azure IoT-Hub -> Azure 功能 -> Azure Cosmos DB。

Web 应用程序使用 Azure B2C 让用户能够登录,但我如何将设备 ID“分配”给用户?我已经读过可以创建具有对某些分区键的特定访问权限的访问令牌,但是如何存储具有每个用户访问权限的信息?我是否需要一个新的数据库来仅存储这些信息?

一开始,如果我必须手动授予权限,那很好。

基本信息:

  • Azure cosmos db 中的数据使用 device-id 作为分区键。
  • 用户可以拥有多个设备。
  • Web 应用程序正在运行 ASP.NET 核心(我是新来的)。
  • Web 应用程序需要登录才能访问。
  • 我在 Visual Studio 2019 中编码,并使用了具有内置授权的示例。

谢谢您的帮助。

注意:要求可能太多,但一般解释和代码示例对我来说是完美的:)

更新: 我设法获取登录用户的电子邮件:

@using System.Security.Claims;  // for using ClaimsIdentity

// Get user information
var userEmailAddress = ((ClaimsIdentity)User.Identity).FindFirst("emails").Value;

我最初的想法是建立一个数据库,其中包含:“电子邮件”和“可访问设备”。我想这必须是一个单独的数据库,因为我需要 cosmos db 中的生存时间参数。

标签: azureasp.net-coreazure-cosmosdb

解决方案


好吧,我一直忙于其他项目,但我终于回到了这个问题。

所以基本上我想要一个单独的数据库的原因是因为我需要 Azure Cosmos-DB 上的 TTL,并且我不想删除用户权限。

事实证明,可以通过在文档本身中设置“ttl”字段来否决数据库的默认 TTL。从而可以排除文档被删除。

所以基本的解决方案是:创建一个“ttl”参数设置为-1的文档,以排除它被删除。然后,此文档可以包含有关哪些用户可以访问什么的信息。


推荐阅读