我正在使用sonatadmin进行symfony 2项目。有时管理员用户可能会意外删除他自己的帐户。如何防止管理员用户删除他自己的帐户?谢谢!SonataAdmin:防止管理员删除自己的帐户
3
A
回答
3
为了防止管理员通过以下ADVANCED CONFIGURATION
admin: # Admin Classes
user:
class: Sonata\UserBundle\Admin\Entity\UserAdmin
controller: YourUserBundle:CRUD
translation: SonataUserBundle
,然后在你的控制器覆盖删除自己的帐户,你需要定义自己的CRUDController
索纳塔用户在这些功能batchActionDelete()
& deleteAction()
功能检查,如果请求包含管理对象/ id然后在这里限制。对于batchActionDelete()
功能
0
我与FOSUserBundle一起使用SonataUserBundle和
public function deleteAction($id)
{
$id = $this->get('request')->get($this->admin->getIdParameter());
$object = $this->admin->getObject($id);
if (!$object) {
throw new NotFoundHttpException(sprintf('unable to find the object with id : %s', $id));
}
$userid = $this->getUser()->getId() // get id of logged in user
if($userid == $id){
$this->addFlash(
'sonata_flash_error',
'Error you cannot delete your own account'
);
return $this->redirectTo($object);
}
// other code from base class
}
同样的逻辑我结束了以下解决方案。
config.yml:
parameters:
sonata.user.admin.user.controller: AppBundle:CRUD\CRUD
的appbundle \控制器\ CRUD \ CRUDController:
<?php
namespace AppBundle\Controller\CRUD;
use Sonata\AdminBundle\Controller\CRUDController as Controller;
use Sonata\AdminBundle\Datagrid\ProxyQueryInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
class CRUDController extends Controller
{
public function deleteAction($id)
{
$request = $this->getRequest();
$id = $request->get($this->admin->getIdParameter());
$object = $this->admin->getObject($id);
if (!$object) {
throw $this->createNotFoundException(sprintf('unable to find the object with id: %s', $id));
}
$currentUserId = $this->getUser()->getId(); // ID of the current user
if ($currentUserId == $id) {
$this->addFlash(
'sonata_flash_error',
'You cannot delete your own account.'
);
return $this->redirectTo($object);
}
return parent::deleteAction($id);
}
public function batchActionDelete(ProxyQueryInterface $query)
{
$request = $this->getRequest();
$currentUserId = $this->getUser()->getId(); // ID of the current user
$selectedUsers = $query->execute();
foreach ($selectedUsers as $selectedUser) {
if ($selectedUser->getId() == $currentUserId) {
$this->addFlash(
'sonata_flash_error',
'You cannot delete your own account.'
);
return new RedirectResponse(
$this->admin->generateUrl('list', array('filter' => $this->admin->getFilterParameters()))
);
}
}
return parent::batchActionDelete($query);
}
}
参考文献:
相关问题
- 1. 删除ObjectGears中的管理员帐户
- 2. 防止用户使自己的管理员
- 3. tfs - 删除自己的用户而不是管理员
- 4. Django管理员如何解锁自己的帐户?
- 5. Drupal 7 - 删除自己的帐户
- 6. 在批处理中删除多个管理员帐户(Win7)
- 7. 管理magento中的管理员帐户
- 8. WordPress的管理员帐户在phpmyadmin中被删除
- 9. 确保管理员帐户是不可删除的
- 10. Django管理员防止删除最后一个记录
- 11. 检测管理员帐户
- 12. PHP管理员帐户
- 13. 用管理员帐户
- 14. 用户可以删除自己的评论没有管理员评论权限
- 15. WordPress的管理员用户删除
- 16. 允许用户/管理员自己更新内容管理
- 17. 除非用户角色是管理员,否则防止自动构建属性?
- 18. 帐户已删除将该帐户的所有帖子移动到默认管理员帐户
- 19. 本地管理员组中的SharePoint场管理员帐户
- 20. 管理员和非管理员帐户的Restful api设计
- 21. 用户无法删除自己的帐户,Rails 4 + Devise
- 22. 允许用户删除自己的帐户 - Authlogic
- 23. 通过无管理员用户帐户
- 24. Firebase管理员和用户帐户
- 25. 从非管理员用户帐户启动/停止Windows服务
- 26. SQL Server的两个管理员帐户
- 27. 流星:用户帐户管理和创建由管理员只
- 28. ASP.NET Core从管理员帐户访问用户帐户
- 29. 使用delete()方法删除本地管理员帐户带有Powershell的ADSI
- 30. 阻止某个用户使用角色Sitecore客户端通过管理管理员帐户进行管理
这可能帮助https://sonata-project.org/bundles/admin/2-3/doc/reference/batch_actions.html您可以ovveride模板,如果去掉复选框行中的用户是admin –
我尝试了类似的东西。但有一点是用户仍然可以在帐户编辑页面中删除他的帐户。所以我可能需要修改一些代码 – fallcool