Я только что открыл Сонату, и мне кажется, что это круто, но я не могу найти, как делать простые вещи.
Например, у меня есть список элементов, от одного до многих для пользовательского объекта, возможно ли отображать только те объекты, которые принадлежат текущему пользователю?
В этом же Admin я хотел бы отображать больше полей, если у пользователя есть роль администратора.
Для завершения можно отобразить некоторые части администратора только для некоторых ролей, например, я хочу, чтобы пользователь с администратором роли на моем userAdmin.
Чтобы отфильтровать список, вы должны использовать createQuery в своем классе администратора, например:
public function createQuery($context = 'list') {
$user = $this->getConfigurationPool()->getContainer()->get('security.context')->getToken()->getUser();
$query = parent::createQuery($context);
$query->andWhere($query->getRootAlias() .'.user =: user'));
$query->setParameter('user', $user);
return $query;
}
Чтобы отображать больше полей в зависимости от пользовательских ролей, вы можете сделать это в формеMapper, например:
if ($user->hasRole('ROLE_ADMINISTRATEUR'))
{
$formMapper->addYourfields ....
}
Наконец, чтобы закрепить область отверстия, вы можете использовать symfony ACL, например, в security.yml, вы можете это сделать:
- { path: ^/admin/, role: [ROLE_ADMINISTRATEUR] }
Вы можете больше узнать о symfony ACL