的名單在多租戶系統,我注入當前用戶角色爲我所有的學說存儲庫,以確保用戶只能看到他們有機會獲得:自動裝配,以減少服務
class SiteRepository extends SecurityAwareRepository
{
public function createQueryBuilder($alias, $indexBy = null)
{
$qb = $this->_em->createQueryBuilder()
->select($alias)
->from($this->_entityName, $alias, $indexBy)
->orderBy("$alias.name");
switch ($this->getHighestRole()) {
case 'ROLE_PARTNER':
$qb
->innerJoin("$alias.BilledTo", 'o')
->innerJoin('o.Users', 'u')
->where('u.id=:user_id')
->setParameter('user_id', $this->getUserId())
;
break;
case 'ROLE_CUSTOMER':
$qb
->innerJoin("$alias.Organisation", 'o')
->innerJoin('o.Users', 'u')
->where('u.id=:user_id')
->setParameter('user_id', $this->getUserId())
;
break;
case 'ROLE_SUPERADMIN':
//full access
break;
default:
$qb->where('1=0');
}
return $qb;
}
我米目前裝載這些庫爲這樣的服務:
services:
invoice_repository:
class: AppBundle\Repository\InvoiceRepository
factory: ["@doctrine", getRepository]
arguments:
- "AppBundle:Invoice"
calls:
- method: setTokenStorage
arguments:
- "@security.token_storage"
site_repository:
class: AppBundle\Repository\SiteRepository
factory: ["@doctrine", getRepository]
arguments:
- "AppBundle:Site"
calls:
- method: setTokenStorage
arguments:
- "@security.token_storage"
我可以消除這種重複與自動裝配,如果是如何?
雖然與autowire無關,但實際上可以插入自己的RepositoryFactory類,從而可以爲您注入令牌存儲。消除呼叫部分。 https://stackoverflow.com/questions/44008937/how-can-i-inject-class-inside-custom-repository-symfony-2-7/44070750#44070750使用你自己的工廠在概念上好一點,因爲它允許$ em-> getRepo按預期工作。 – Cerad
避免調用部分的另一種方法是使用父服務。 https://symfony.com/doc/current/service_container/parent_services.html – Cerad
Cerad,我實現了一個自定義倉庫工廠,你可以添加這個作爲我能接受的答案嗎? – jdog