我正在使用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