簡體   English   中英

Symfony2 Sonata Admin Bundle作為“前端”

[英]Symfony2 Sonata Admin Bundle as 'frontend'

我們正在一個看起來像這樣的項目中運行:

客戶可以登錄可以在其中編輯信息的控制面板。 他們編輯的信息將由其他軟件通過REST API提取(這已經可以在以前的版本中使用了)。

實際上,我們應用程序的基礎實際上與SonataAdminBundle相同。 但是據我所知,我無法過濾用戶登錄SonataAdminBundle中查看的數據。

例如:

  • User1User2User3Customer1的雇員。 他們只需要查看所有他們從Customer1添加的數據
  • 將新客戶Customer2添加到系統后,還將創建一些用戶User10User11 他們只需要看到顧客2customer1表 (或相反)添加信息,而不是信息

僅使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM