gpt4 book ai didi

permissions - DocumentDB 用户权限 - 按分区键?

转载 作者:行者123 更新时间:2023-12-04 02:45:00 35 4
gpt4 key购买 nike

我的 DocumentDb 应用几乎具有 Multi-Tenancy 架构。我计划一开始就使用分区键,以确保整个东西在流行时不必重新设计。当前的体系结构需要一个单一的异构集合。每个租户架构的集合是行不通的。

所有访问都将包括租户 ID,以防止泄漏。这不是我关心的。

我需要客户端只读访问权限,因此我计划让我的服务器根据每个用户的权限颁发资源 token 。

但我在文档中注意到,每个用户每个资源只能拥有一个权限。我不想为每个文档创建权限。基本上我想要每个分区键的权限。这样,租户 ID 就成为客户端读取的约束因素。

基本上,客户端设备对共享其分区键的集合中的所有文档具有只读访问权限。

如果资源 token 被泄露,它只会持续一个小时,并且不会让任何人访问整个集合,只能访问该租户的数据。

如果每个权限具有不同的分区键,我能否让单个 DocumentDb 数据库用户对同一集合具有多个只读权限?

TIA

最佳答案

支持为每个资源(针对每个分区键)创建多个权限。这是一个例子:

User user = await client.CreateUserAsync(UriFactory.CreateDatabaseUri("SampleDatabase"), new User { Id = "NewUser" });
Permission permission = await client.CreatePermissionAsync(
user.SelfLink,
new Permission
{
Id = "ReadA",
PermissionMode = PermissionMode.Read,
ResourcePartitionKey = new PartitionKey("Andersen"),
ResourceLink = collection.SelfLink
});

Permission permission2 = await client.CreatePermissionAsync(
user.SelfLink,
new Permission
{
Id = "ReadW",
PermissionMode = PermissionMode.Read,
ResourcePartitionKey = new PartitionKey("Wakefield"),
ResourceLink = collection.SelfLink
});

权限适用于具有相同分区键的所有文档。因此,当您使用具有权限的分区键访问文档时,DocumentDB 成功返回文档,但是使用另一个分区键时,DocumentDB 返回授权错误:

DocumentClient restrictedClient1 = new DocumentClient(
new Uri("https://FILLME:443/"),
permission.Token);

// Succeeds
await restrictedClient1.ReadDocumentAsync(
UriFactory.CreateDocumentUri("SampleDatabase", "SampleCollection", "AndersenFamily"),
new RequestOptions { PartitionKey = new PartitionKey("Andersen") });

// Fails
await restrictedClient1.ReadDocumentAsync(
UriFactory.CreateDocumentUri("SampleDatabase", "SampleCollection", "WakefieldFamily"),
new RequestOptions { PartitionKey = new PartitionKey("Wakefield") });

关于permissions - DocumentDB 用户权限 - 按分区键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40689110/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com