ZCML File
principalfolder.zcml

<configure
    xmlns="http://namespaces.zope.org/zope"
    xmlns:apidoc="http://namespaces.zope.org/apidoc"
    xmlns:zcml="http://namespaces.zope.org/zcml"
    i18n_domain="zope"
    >
<class
    class=".principalfolder.InternalPrincipal"
    >
<require
    permission="zope.ManageServices"
    interface=".principalfolder.IInternalPrincipal"
    set_schema=".principalfolder.IInternalPrincipal"
    />
</class>
<class
    class=".principalfolder.PrincipalFolder"
    >
<require
    permission="zope.ManageServices"
    interface="zope.app.container.interfaces.IContainer"
    />
<require
    permission="zope.ManageServices"
    attributes="prefix"
    />
</class>
<adapter
    factory=".idpicker.IdPicker"
    provides="zope.app.container.interfaces.INameChooser"
    for=".principalfolder.IInternalPrincipalContainer"
    />
<adapter
    factory=".principalfolder.FoundPrincipalFactory"
    />
<adapter
    factory=".principalfolder.AuthenticatedPrincipalFactory"
    />
<include
    file="principalfolder.zcml"
    package=".browser"
    />
<configure
    zcml:condition="have apidoc"
    >
<apidoc:bookchapter
    id="principalfolder"
    title="Principal Folder"
    doc_path="principalfolder.txt"
    parent="security/authentication"
    />
</configure>
</configure>