[英]Symfony2 Sonata Admin Bundle as 'frontend'
我們正在一個看起來像這樣的項目中運行:
客戶可以登錄可以在其中編輯信息的控制面板。 他們編輯的信息將由其他軟件通過REST API提取(這已經可以在以前的版本中使用了)。
實際上,我們應用程序的基礎實際上與SonataAdminBundle相同。 但是據我所知,我無法過濾用戶登錄SonataAdminBundle中查看的數據。
例如:
僅使用SonataAdminBundle是否可能? 還是我們必須創建自己的軟件才能做到這一點?
我知道我們必須創建所有不同的多通或單通關系,但這不是問題。 主要問題是,我可以按當前登錄的用戶篩選數據嗎? 並且以管理員或超級管理員身份登錄時,無需應用任何數據過濾器。
提前致謝!
是的,只能使用SonataAdminBundle。
首先,用戶通過不同的列表視圖訪問數據,因此您需要覆蓋Admin類的createQuery方法以顯示正確的Customer。
(不要忘記注入@ security.context服務)
public function createQuery($context = 'list')
{
$query = parent::createQuery($context);
if (!$this->isGranted('ROLE_SUPER_ADMIN') || !$this->isGranted('ROLE_ADMIN'))
{
$user = $this->securityContext->getToken()->getUser();
$query->
// your custom query.
;
}
return $query;
}
然后,您需要對所有其他操作(顯示,編輯和刪除)進行證券化,以防止用戶訪問其他客戶。
為此,我將覆蓋控制器的操作,並在調用父方法之前添加自己的邏輯。
public function editAction($id = null)
{
// check if the user can access to the current customer
// if not throw new AccessDeniedException();
return parent::editAction($id);
}
也許有更好的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.