public async Task <List <TreeNodeUI> > GetNodesAsync(string alias, ParentPath?parentPath) { var collection = _collectionProvider.GetCollection(alias); if (collection == null) { throw new InvalidOperationException($"Failed to get collection for given alias ({alias})."); } var parent = await _parentService.GetParentAsync(parentPath); if (collection.TreeView?.EntityVisibility == EntityVisibilty.Visible) { // TODO: pagination var query = Query.TakeElements(25); var entities = await collection.Repository.GetAllAsync(parent, query); return(await entities.ToListAsync(async entity => { var entityVariant = collection.GetEntityVariant(entity); var node = new TreeNodeUI { Id = entity.Id, Name = collection.TreeView.Name !.StringGetter.Invoke(entity), RootVisibleOfCollections = collection.Collections.All(subCollection => subCollection.TreeView?.RootVisibility == CollectionRootVisibility.Visible), Collections = collection.Collections.ToList(subCollection => subCollection.Alias) }; var editAuthorizationChallenge = await _authorizationService.AuthorizeAsync( _httpContextAccessor.HttpContext.User, entity, Operations.Update); if (editAuthorizationChallenge.Succeeded) { node.Path = UriHelper.Node(Constants.Edit, collection.Alias, entityVariant, parentPath, entity.Id); } else { var viewAuthorizationChallenge = await _authorizationService.AuthorizeAsync( _httpContextAccessor.HttpContext.User, entity, Operations.Read); if (viewAuthorizationChallenge.Succeeded) { node.Path = UriHelper.Node(Constants.View, collection.Alias, entityVariant, parentPath, entity.Id); } } return node; })); } else { return(new List <TreeNodeUI>()); } }