Azure Cosmos DB-每个用户访问不同的数据(SQL)

Azure Cosmos DB-每个用户访问不同的数据(SQL),azure,asp.net-core,azure-cosmosdb,Azure,Asp.net Core,Azure Cosmosdb,我是网络开发新手,所以这个问题可能很简单 我有一些物理设备,可以将湿度(和其他东西)传输到Azure Cosmos DB。我希望用户只能阅读他们的设备(通过web应用程序中的图表)。所有设备都以相同的集合结束 我已通过以下方式在Azure中设置了一个系统: 设备->Azure物联网中心->Azure功能->Azure宇宙数据库 web应用程序使用Azure B2C让用户能够登录,但我如何“分配”设备id给用户?我已经读到,可以创建对某些分区密钥具有特定访问权限的访问令牌,但是如何存储具有每个用户

我是网络开发新手,所以这个问题可能很简单

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

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

设备->Azure物联网中心->Azure功能->Azure宇宙数据库

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

在开始时,如果我必须手动授予权限,这是很好的

一般信息:

  • Azure cosmos db中的数据使用设备id作为分区密钥
  • 用户可以有多个设备
  • 该web应用程序正在运行ASP.NET核心(我是新来的)
  • web应用程序需要登录才能访问
  • 我在VisualStudio2019中编写代码,并使用了具有内置授权的示例
谢谢你的帮助

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

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

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

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

我最初的想法是建立一个包含“电子邮件”和“可访问设备”的数据库。我想这必须是一个单独的数据库,因为我需要cosmosdb中的Time-to-Live参数

通过使用,您可能能够实现您想要的目标

与文档中的此示例一样,您可以通过分区键分配权限:

//Create a user.
Database database = benchmark.client.GetDatabase("SalesDatabase");

User user = await database.CreateUserAsync("User 1");

// Create a permission on a container and specific partition key value
Container container = client.GetContainer("SalesDatabase", "OrdersContainer");
user.CreatePermissionAsync(
    new PermissionProperties(
        id: "permissionUser1Orders",
        permissionMode: PermissionMode.All,
        container: benchmark.container,
        resourcePartitionKey: new PartitionKey("012345")));

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

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

事实证明,通过在文档本身中设置“TTL”字段,可以推翻数据库的默认TTL。因此,可以排除被删除的文档

因此,基本解决方案是:
创建“ttl”参数设置为-1的文档,以将其从删除中排除。然后,此文档可以包含有关哪些用户可以访问哪些内容的信息

是的,我正在使用此方法完成一个示例。但我如何将其与B2C用户结合呢?:)对不起,我帮不了你