Scénario :

L'affichage ou non d'une action doit être générée a la volée suivant les données de la ligne

Gérer dynamiquement des actions dans une datagrid

Dans datagrid.yml

properties:
    link_1:
        type: url
        route: route_1
        params: [id]
    link_2:
        type: url
        route: route_2
        params: [id]

actions:
    action_1:
        type:          navigate
        label:         edit
        link:          link_1
        icon:          edit
        rowAction:     true
    action_2:
        type:          navigate
        label:         edit
        link:          link_2
        icon:          edit
        rowAction:     true
action_configuration: ['@acme_test.datagrid.entity.action_permission_provider', 'getActionPermissions']

On fait le service du provider :

    acme_test.datagrid.entity.action_permission_provider:
        class: Acme\Bundle\TestBundle\Datagrid\EntityActionPermissionProvider

La classe qui va avec :

$record contient nos données pour chaque ligne de la datagrid

<?php

namespace Acme\Bundle\TestBundle\Datagrid;

use Marello\Bundle\DataGridBundle\Action\ActionPermissionInterface;
use Oro\Bundle\DataGridBundle\Datasource\ResultRecordInterface;

class EntityActionPermissionProvider implements ActionPermissionInterface
{
    /**
     * {@inheritdoc}
     */
    public function getActionPermissions(ResultRecordInterface $record)
    {

        // Votre traitement qui va permettre de décider les actions qu'on affiche 
        // false => pas affiché 
        // true => affiché

        return [
            'action_1' => true,
            'action_2' => false
        ];
    }
}