Skip to content

Instantly share code, notes, and snippets.

View codemillmatt's full-sized avatar

Matt Soucoup codemillmatt

View GitHub Profile
static async Task<Permission> GetPartitionPermission(string userId, DocumentClient client, string databaseId, string collectionId)
string permissionId = "";
bool isLimitedPartition = false;
Permission partitionPermission = new Permission();
if (userId == publicUserId)
{
permissionId = $"{userId}-partition-limited-{collectionId}";
isLimitedPartition = true;
}
else
Uri permissionUri = UriFactory.CreatePermissionUri(databaseId, userId, permissionId);
partitionPermission = await client.ReadPermissionAsync(permissionUri);
catch (DocumentClientException ex)
{
if (ex.StatusCode == HttpStatusCode.NotFound)
{
await CreateUserIfNotExistAsync(userId, client, databaseId);
static async Task CreateUserIfNotExistAsync(string userId, DocumentClient client, string databaseId)
{
try
{
await client.ReadUserAsync(UriFactory.CreateUserUri(databaseId, userId));
}
catch (DocumentClientException e)
{
if (e.StatusCode == HttpStatusCode.NotFound)
{
var newPermission = new Permission
{
PermissionMode = PermissionMode.Read,
Id = permissionId,
ResourceLink = collectionUri.ToString()
};
if (isLimitedPartition)
newPermission.ResourcePartitionKey = new PartitionKey(false);
partitionPermission = await client.CreatePermissionAsync(userUri, newPermission);
public async Task<string> GetPermissionToken(string accessToken)
{
var baseUri = new Uri(APIKeys.BrokerUrlBase);
var client = new HttpClient { BaseAddress = baseUri };
var brokerUrl = new Uri(baseUri, APIKeys.BrokerUrlPath);
var request = new HttpRequestMessage(HttpMethod.Get, brokerUrl);
// Here check if there's a token or not
var token = await functionService.GetPermissionToken(accessToken);
docClient = new DocumentClient(new Uri(APIKeys.CosmosUrl), token);