我正在使用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. 防止用户使自己的管理员
- 2. tfs - 删除自己的用户而不是管理员
- 3. Django管理员如何解锁自己的帐户?
- 4. 管理magento中的管理员帐户
- 5. WordPress的管理员帐户在phpmyadmin中被删除
- 6. Django管理员防止删除最后一个记录
- 7. 用管理员帐户
- 8. 除非用户角色是管理员,否则防止自动构建属性?
- 9. 允许用户/管理员自己更新内容管理
- 10. 帐户已删除将该帐户的所有帖子移动到默认管理员帐户
- 11. 本地管理员组中的SharePoint场管理员帐户
- 12. 允许用户删除自己的帐户 - Authlogic
- 13. Firebase管理员和用户帐户
- 14. 从非管理员用户帐户启动/停止Windows服务
- 15. SQL Server的两个管理员帐户
- 16. 使用delete()方法删除本地管理员帐户带有Powershell的ADSI
- 17. Oracle安全 - 如何防止用户从DROP TABLE自己的表中删除
- 18. 阻止某个用户使用角色Sitecore客户端通过管理管理员帐户进行管理
- 19. 管理员帐户不断锁定
- 20. Spree管理员只有帐户
- 21. AggCat.getAccountTransactions和帐户管理员收费
- 22. 如何安全管理员帐户
- 23. activeadmin管理员帐户访问斜面
- 24. Apex 5:管理员帐户被锁定
- 25. Websphere管理员帐户被锁定
- 26. 防止在AdminCP中删除帐户时它仍然登录
- 27. 防止删除
- 28. 登录MVC3用户只能看到自己的东西,除了管理员
- 29. 更改管理员帐户的密码也会影响员工帐户
- 30. 如何防止非管理员用户禁用Outlook 2007Addin?
这可能帮助https://sonata-project.org/bundles/admin/2-3/doc/reference/batch_actions.html您可以ovveride模板,如果去掉复选框行中的用户是admin –
我尝试了类似的东西。但有一点是用户仍然可以在帐户编辑页面中删除他的帐户。所以我可能需要修改一些代码 – fallcool