php - 奏鸣曲管理员 : Prevent Admin From Deleting His Own Account

标签 php symfony sonata-admin

我在 symfony 2 项目中使用 sonatadmin。有时管理员用户可能会不小心删除自己的帐户。如何防止管理员用户删除自己的帐户?谢谢!

最佳答案

要防止管理员删除自己的帐户,您需要按照 ADVANCED CONFIGURATION 为奏鸣曲用户定义自己的 CRUDController

admin:                  # Admin Classes
    user:
        class:          Sonata\UserBundle\Admin\Entity\UserAdmin
        controller:     YourUserBundle:CRUD
        translation:    SonataUserBundle

然后在您的 Controller 中覆盖 batchActionDelete()deleteAction() 函数,在这些函数中检查请求是否包含管理对象/id,然后在此处进行限制。

 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

   }

batchActionDelete() 函数的逻辑相同

关于php - 奏鸣曲管理员 : Prevent Admin From Deleting His Own Account,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35738022/

相关文章:

php - Laravel:将数据添加到 Input::all()

symfony - Sonata admin-bundle - 尚未注销导航栏

symfony - 在 Sonata Admin Bundle 中以编辑形式处理字符串数组

php - 优先考虑存储库中的 MySQL SELECT/LIKE 结果

php - SonataMediaBundle - 如何使用自定义文件输入

php - 有关如何更改静态 Assets 的文件名以防止浏览器缓存的 Assets 文件版本过时的想法

php - SQL 查询中的 sprintf( '%d' , $tainted ) 是漏洞吗?

symfony - 提交在同一页面上呈现的两个不相关的表单

php - 如何使查询和结果缓存适用于 Symfony2 和 Doctrine2 中关联实体的查询?