public IEnumerable<Dashboard> Dashboards() { if (_dashboards != null && _dashboardLoaded.Add(_cacheLife) < DateTime.UtcNow) { return _dashboards; } var connection = new DocumentDbConnectionString(_connectionString); using (var client = new DocumentClient(connection.AccountEndpoint, connection.AccountKey)) { var database = client.ReadDatabaseFeedAsync().Result; var dashboardCollection = client.ReadDocumentCollectionFeedAsync( database.Single(x => x.Id == connection.DatabaseName).CollectionsLink).Result; var dashboards = client.ReadDocumentFeedAsync(dashboardCollection.Single(x => x.Id == "dashboards").DocumentsLink) .Result; _dashboards = dashboards.Select(x => new Dashboard { Title = x.GetPropertyValue<string>("Title"), Slug = x.GetPropertyValue<string>("Slug"), Sections = x.GetPropertyValue<IEnumerable<DashboardSection>>("Sections") }).OrderBy(x => x.Title); _dashboardLoaded = DateTime.UtcNow; return _dashboards; } }
void Initialize(EventStorageConfiguration configuration) { _client = new DocumentClient(new Uri(configuration.Url), configuration.AuthorizationKey); _client.ReadDatabaseFeedAsync() .ContinueWith(a => _database = a.Result.Where(d => d.Id == configuration.DatabaseId).SingleOrDefault()) .Wait(); if (_database == null) { _database = new Database { Id = configuration.DatabaseId }; _client.CreateDatabaseAsync(_database) .ContinueWith(d => _database = d.Result.Resource) .Wait(); } }
private static async Task AttemptAdminOperationsAsync(string collectionLink, Permission permission) { using (DocumentClient client = new DocumentClient(new Uri(endpointUrl), permission.Token)) { //try read collection > should succeed because user1 was granted Read permission on col1 var docs = await client.ReadDocumentFeedAsync(collectionLink); foreach (Document doc in docs) { Console.WriteLine(doc); } //try iterate databases > should fail because the user has no Admin rights //but only read access to a single collection and therefore //cannot access anything outside of that collection. try { var databases = await client.ReadDatabaseFeedAsync(); foreach (Database database in databases) { throw new ApplicationException("Should never get here"); } } catch (DocumentClientException de) { //expecting an Unauthorised exception, anything else, rethrow if (de.StatusCode != HttpStatusCode.Unauthorized) throw; } } }