Not sure if this has changed in AEM 6 compared to CQ/AEM 5.X but you can define which components are allowed within the design mode. If you want to have this deployable with your code you can have the definition in the design xml:
<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:cq="http://www.day.com/jcr/cq/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
jcr:primaryType="cq:Page">
<jcr:content
jcr:primaryType="nt:unstructured"
jcr:title="My Design"
sling:resourceType="wcm/core/components/designer">
<mypagecomponent jcr:primaryType="nt:unstructured">
<par jcr:primaryType="nt:unstructured"
sling:resourceType="foundation/components/parsys"
components="[group:My Group A]">
<section jcr:primaryType="nt:unstructured"/>
<myparcontainer jcr:primaryType="nt:unstructured"
<par jcr:primaryType="nt:unstructured"
sling:resourceType="project/components/myparsys"
components="[group:My Group B]">
<section jcr:primaryType="nt:unstructured"/>
</par>
</myparcontainer>
</par>
</mypagecomponent>
</jcr:content>
</jcr:root>
The allowedChildren
and allowedParents
filters are quite complex to use and cannot be combined. I gave up using them in CQ/AEM 5.X