Search code examples
symfonyoverridingsonata-adminsonata

SonataUserBundle overriding EditableRolesBuilder


Im trying to override EditableRolesBuilder in Security folder.

  • I try to make same hierarchy in Application\Sonata\UserBundle\Security\EditableRolesBuilder which extends the base one Sonata\UserBundle\Security\EditableRolesBuilder from vendor but with no success.
  • I try to override service in Sonata\UserBundle\Resources\config\admin.xml, to pass my custom class but i can't find anywhere how to override whole service.This service is without parameters but hardcoded class and i cant't pass it in config.yml

Solution

  • In Sonata admin if you wish to override security roles handler you have to override 2 services

    • sonata.user.editable_role_builder
    • sonata.user.form.type.security_roles

    And definitions will look like as below

        <services>
            <service id="sonata.user.editable_role_builder" class="Acme\DemoBundle\Security\EditableRolesBuilder">
                <argument type="service" id="security.context" />
                <argument type="service" id="sonata.admin.pool" />
                <argument>%security.role_hierarchy.roles%</argument>
            </service>
            <service id="sonata.user.form.type.security_roles" class="Acme\DemoBundle\Form\Type\SecurityRolesType">
                <tag name="form.type" alias="sonata_security_roles" />
                <argument type="service" id="sonata.user.editable_role_builder" />
            </service>
        </services>
    

    For reference see Sonata Admin Override Security Roles Handler