Как добавить item_permission при удалении действия в easyadmin? - PullRequest
0 голосов
/ 23 февраля 2020

Я использую EasyadminBundle для внутреннего интерфейса приложения Symfony.

Два типа пользователей имеют доступ к серверной части, и я хотел бы оставить за собой право удалять небольшое количество лиц, которым предоставлено ROLE_ADMIN.
Я бы хотел использовать * Параметр 1009 *, как и для других действий (например, show или list):

Lieu:
    class: App\Entity\Lieu
    list:
        item_permission: ROLE_ENCADRANT
    delete:
        item_permission: ROLE_ADMIN

Но он не работает, и я все еще могу удалить пользователя, когда вошел в систему с помощью ROLE_ENCADRANT. Есть ли другое решение?

В настоящее время я выполнил sh его:

Lieu:
    class: App\Entity\Lieu
    list:
        item_permission: ROLE_ENCADRANT
        action: ['-delete']
        help: "the delete button is accessible in <b>Edit</b> view"
    form:
        item_permission: ROLE_ADMIN

Я просто ищу 100% -ное решение для конфигурации, более элегантное, чем мое .

1 Ответ

1 голос
/ 23 февраля 2020

Взгляните на , добавив действие в документы. Действие может быть привязано к маршруту, что позволяет указать, какую роль может выполнять действие. Недостатком является то, что кнопка просмотра списка присутствует независимо от роли. Вы можете добавить сообщение fla sh, чтобы сообщить пользователю, есть ли у него разрешение.

Вот пример из проекта. Не совсем то, что вы ищете, но вы можете начать:

easyadmin.yaml:

Admin:
    class: App\Entity\Admin
    disabled_actions: ['new', 'edit']
    list:
        actions:
            -
                name: 'admin_enabler'
                type: 'route'
                label: 'Enable/Disable'

контроллер:

    /**
     * @Route("/enabler", name = "admin_enabler")
     */
    public function enabler(Request $request)
    {
        $em = $this->getDoctrine()->getManager();
        $id = $request->query->get('id');
        $admin = $em->getRepository(Admin::class)->find($id);
        $enabled = $admin->isEnabled();
        if (!$admin->isActivator() && !$admin->hasRole('ROLE_SUPER_ADMIN')) {
            $admin->setEnabled(!$enabled);
            $em->persist($admin);
            $em->flush();
        } else {
            $this->addFlash('danger', $admin->getFullName() . ' cannot be disabled');
        }

        return $this->redirectToRoute('easyadmin', array(
            'action' => 'list',
            'entity' => $request->query->get('entity'),
        ));    
    }
...