如何在 easyadmin 中添加 item_permission 删除操作?
How to add item_permission on delete action in easyadmin?
我使用 EasyadminBundle 作为 Symfony 应用程序的后端。
两种类型的用户可以访问后端,我想保留删除权限给少数被授予ROLE_ADMIN
的人。
对于其他操作(例如 show
或 list
),我想使用 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'),
));
}
我使用 EasyadminBundle 作为 Symfony 应用程序的后端。
两种类型的用户可以访问后端,我想保留删除权限给少数被授予ROLE_ADMIN
的人。
对于其他操作(例如 show
或 list
),我想使用 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'),
));
}