cosmos db
Resource token
而不是帐户
master key
我以前用过。
DocumentClient
:
var client = new DocumentClient(new Uri(configAccountName), configAccountKey);
await client.OpenAsync();
这种方法效果很好,但我想使用
resource token
link1
link2
.
db user
All permissions
按以下代码:
public static async Task<User> CreateUserAndPermissionAsync(this DocumentClient client, string userId)
{
var dbUri = UriFactory.CreateDatabaseUri(dataBase);
var user = await client.CreateUserAsync(dbUri, new User { Id = userId });
var collectionUri = UriFactory.CreateDocumentCollectionUri(dataBase, collectionName);
var permission = await client.CreatePermissionAsync(
user.Resource.SelfLink,
new Permission
{
Id = "MyPermission",
PermissionMode = PermissionMode.All,
ResourceLink = collectionUri.ToString(),
ResourcePartitionKey = new PartitionKey(userId)
});
return user.Resource;
}
用户创建正确,我可以通过
ReadUserAsync
ReadPermissionAsync
方法。
然后,我想创建
文档客户端
permissions
//this is a temporally document client instance to read permissions for my user in below extensions method versions
var client = new DocumentClient(new Uri(configAccountName), configAccountKey);
我已经检查了3种方法(其中一些类似)。我试着给每一种方式打电话,以获得新的
文档客户端
实例(
变量),然后调用
OpenAsync
var newClient = await client.GetClientForUserAsync_v###(userName);
await newClient.OpenAsync();
所有尝试均失败
//version 1:
public static async Task<DocumentClient> GetClientForUserAsync_v1(this DocumentClient client, string userId)
{
var userUri = UriFactory.CreateUserUri(dataBase, userId).ToString();
var permissionsUri = $"{userUri}/permissions";
var permissions = (await client.ReadPermissionFeedAsync(permissionsUri)).ToList();
return new DocumentClient(
client.ServiceEndpoint,
permissions,
client.ConnectionPolicy);
}
OpenAsync
方法因以下错误而崩溃:
无法将值“”解析为ResourceId。,documentdb dotnet sdk/1.22.0主机/32位MicrosoftWindowsNT/6.2.9200.0
//version 2:
public static async Task<DocumentClient> GetClientForUserAsync_v2(this DocumentClient client, string userId)
{
var userUri = UriFactory.CreateUserUri(dataBase, userId).ToString();
var permissionsUri = $"{userUri}/permissions";
var permissions = (await client.ReadPermissionFeedAsync(permissionsUri)).ToList();
return new DocumentClient(
client.ServiceEndpoint,
permissions[0].Token,
client.ConnectionPolicy);
}
OpenAsync
方法因以下错误而崩溃:
ActivityId:##ReplacedActivityId##,Microsoft。蔚蓝色的文件。Common/1.22.0.0,documentdb dotnet sdk/1.22.0主机/32位MicrosoftWindowsNT/6.2.9200.0
//version 3:
public static async Task<DocumentClient> GetClientForUserAsync_v3(this DocumentClient client, string userId)
{
FeedResponse<Permission> permFeed = await client.ReadPermissionFeedAsync(UriFactory.CreateUserUri(dataBase, userId));
List<Permission> permList = new List<Permission>();
foreach (Permission perm in permFeed)
{
permList.Add(perm);
}
DocumentClient userClient = new DocumentClient(new Uri(client.ServiceEndpoint.AbsoluteUri), permList, new ConnectionPolicy()
{
//**UPDATE**: I tried all ConnectionMode values as well as without this parameter
ConnectionMode = ConnectionMode.Gateway
});
return userClient;
}
这个
OpenAsync
.
第一个和第三个错误是最奇怪的,因为我已经检查过了,我看到了
ResourceId
中的值
变量(作为项目
永久列表
权限
来自第一个版本的变量。
有人能帮忙吗?
更新
无法将值“”解析为ResourceId。,documentdb dotnet sdk/1.22.0主机/32位MicrosoftWindowsNT/6.2.9200.0
//version 4
public static async Task<DocumentClient> GetClientForUserAsync_v4(this DocumentClient client, string userId)
{
var user = await client.ReadUserAsync(UriFactory.CreateUserUri(dataBase, userId));
var permissions = await client.ReadPermissionFeedAsync(user.Resource.SelfLink);
List<Permission> permList = new List<Permission>();
foreach (Permission perm in permissions)
{
permList.Add(perm);
}
DocumentClient userClient = new DocumentClient(new Uri(client.ServiceEndpoint.AbsoluteUri), permList, new ConnectionPolicy()
{
ConnectionMode = ConnectionMode.Direct
});
return userClient;
}