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