/// <summary>
 /// Renders <paramref name="controls"/> to a document.
 /// </summary>
 /// <param name="controls">The controls to be rendered.</param>
 /// <param name="factory">The renderer factory.</param>
 /// <param name="level">The depth down the control tree being rendered (affects indenting).</param>
 /// <param name="allControls">The complete control list.</param>
 internal void Render(ControlList controls, ControlRendererFactory factory, int level, ControlList allControls)
 {
     IEnumerable<Control> orderedControls = controls.Where(c => this.controlsAccess.FirstOrDefault(a => a.ControlId == c.Id).AccessLevel == AccessLevel.Write).OrderBy(c => c.Position);
     foreach (Control control in orderedControls)
     {
         var renderer = factory.GetControlRenderer(control);
         renderer.Render(this.document, control, level, allControls);
     }
 }