Spaces:
No application file
No application file
declare(strict_types=1); | |
namespace Mautic\Migrations; | |
use Doctrine\DBAL\Schema\Schema; | |
use Mautic\CoreBundle\Doctrine\AbstractMauticMigration; | |
use Mautic\UserBundle\Entity\Role; | |
use Mautic\UserBundle\Model\RoleModel; | |
final class Version20211209022550 extends AbstractMauticMigration | |
{ | |
public function postUp(Schema $schema): void | |
{ | |
/** @var RoleModel $model */ | |
$model = $this->container->get('mautic.model.factory')->getModel('user.role'); | |
// Get all non admin roles. | |
$roles = $model->getEntities([ | |
'orderBy' => 'r.id', | |
'orderByDir' => 'ASC', | |
'filter' => [ | |
'where' => [ | |
[ | |
'col' => 'r.isAdmin', | |
'expr' => 'eq', | |
'val' => 0, | |
], | |
], | |
], | |
]); | |
/** @var Role $role */ | |
foreach ($roles as $role) { | |
$rawPermissions = $role->getRawPermissions(); | |
if (empty($rawPermissions)) { | |
continue; | |
} | |
$leadPermission = $rawPermissions['lead:leads'] ?? []; | |
$listPermission = $rawPermissions['lead:lists'] ?? []; | |
if (empty($leadPermission) && empty($listPermission)) { | |
continue; | |
} | |
// Map all leads permission to list. | |
$newPermissions = $leadPermission; | |
if (!in_array('full', $newPermissions)) { | |
// If lead has viewown permission, then add create permission for list. | |
if (in_array('viewown', $leadPermission)) { | |
$newPermissions[] = 'create'; | |
} | |
// Add the list related permission. | |
foreach ($listPermission as $perm) { | |
$newPermissions[] = $perm; | |
} | |
} | |
$rawPermissions['lead:lists'] = array_unique($newPermissions); | |
$model->setRolePermissions($role, $rawPermissions); | |
$model->saveEntity($role); | |
} | |
} | |
} | |