2017-06-08 65 views
0

我想了解如何使用DocumentDB,我可以授予多个资源的权限。目前还不清楚我会怎么做,或者目前是否可行。CosmosDB授予多个资源权限?

https://docs.microsoft.com/en-us/azure/cosmos-db/mobile-apps-with-xamarin

在他们的文档在这里,他们陈述

如果你希望两个用户都可以访问相同的待办事项列表,你可以添加额外的权限,以在资源令牌代理的访问令牌。

资源令牌经纪人链接如下:

https://github.com/Azure/azure-documentdb-dotnet/blob/master/samples/xamarin/UserItems/ResourceTokenBroker/ResourceTokenBroker/Controllers/ResourceTokenController.cs#L153-L159

而且我认为他们的具体内容是这样的:

using Microsoft.Azure.Documents; 

Permission p = new Permission 
{ 
    PermissionMode = PermissionMode.All, 
    ResourceLink = collection.SelfLink, 
    ResourcePartitionKey = new PartitionKey(userId), 
    Id = permissionId //needs to be unique for a given user 
}; 

然而,这段代码只支持一个分区键。这是我想要做的,授予集合中多个分区键的权限。

这是有来电,我认为创建令牌:

permission = await Client.CreatePermissionAsync(UriFactory.CreateUserUri(databaseId, userId), p); 

但同样,它看起来像一个单一的许可。这意味着您必须创建N个权限,并且每次访问其中一个资源时,都需要从Resource Broker请求令牌。换句话说,如果我授予5个资源的许可权,当我的客户端转到资源代理时,我需要返回5个令牌?

有没有办法说:这个资源令牌授予PermissionMode.All所有这些资源的权限?

+0

这是行不通的。请参阅https://stackoverflow.com/questions/47001220/cosmodb-documentclient-cannot-accept-multiple-tokens。 – Mark

回答

0

如果我授予5个资源的权限,当我的客户端转到资源代理时,我需要返回5个令牌?

DocumentClient class有四个构造函数和两个这些构造中支持多个资源键使所得DocumentClient对象的规定使用认证对多个资源的操作。您可以在资源令牌代理API中为用户授予多个资源的权限,并将权限对象(而不是单个资源令牌)的列表返回给客户端应用程序。

FeedResponse<Permission> permFeed = await client.ReadPermissionFeedAsync(UriFactory.CreateUserUri("dbid", " userId")); 

List<Permission> permList = permFeed.ToList(); 

的客户端应用程序可以初始化DocumentClient类的实例和客户端应用程序后,通过permList得到它。

var client = new DocumentClient(new Uri(EndpointUri), permList);