azure - 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 中的生存时间参数。
解决方案
好吧,我一直忙于其他项目,但我终于回到了这个问题。
所以基本上我想要一个单独的数据库的原因是因为我需要 Azure Cosmos-DB 上的 TTL,并且我不想删除用户权限。
事实证明,可以通过在文档本身中设置“ttl”字段来否决数据库的默认 TTL。从而可以排除文档被删除。
所以基本的解决方案是:创建一个“ttl”参数设置为-1的文档,以排除它被删除。然后,此文档可以包含有关哪些用户可以访问什么的信息。
推荐阅读
- r - 如何根据 R 中列中的最小值选择具有 dplyr/tidyvese 的列
- nfc - 如何知道苹果支付/谷歌支付或智能卡是否与 NFC 读卡器通信
- javascript - 如何高亮选中
- 只有项目?
- python - python什么时候开始使用不同的算法进行大乘法?
- function - “函数调用”和“回调函数”有什么区别?
- ms-access - MS Access VBA - 如何从 Windows 系统语言环境中独立读取 utf8 文本
- sql - 如何为 psql 添加内部查询
- javascript - Laravel - 如何将 php 变量从刀片文件传递给 javascript 函数
- cordova - 用于 Ionic 的 OverAppBrowser
- c - 如何从 objdump 读取汇编代码输出