如何在 easyadmin 中添加 item_permission 删除操作?

How to add item_permission on delete action in easyadmin?

我使用 EasyadminBundle 作为 Symfony 应用程序的后端。

两种类型的用户可以访问后端,我想保留删除权限给少数被授予ROLE_ADMIN的人。
对于其他操作(例如 showlist),我想使用 item_permission 参数:

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

但它不起作用,当我使用 ROLE_ENCADRANT 登录时,我仍然可以删除用户。还有其他解决方案吗?

我目前完成的是:

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% 配置的解决方案,比我的更优雅

查看文档中的 adding an action。该动作可以绑定到路由,这允许指定什么角色可以执行该动作。缺点是无论角色如何,列表视图按钮都会出现。您可以添加一条即时消息来告知用户他们是否有权限。

这是一个项目的例子。不完全是您要找的东西,但可以帮助您入门:

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'),
        ));    
    }