您必須在您的UserAdmin服務中注入安全上下文服務。
爲了做到這一點,你必須更新包的services.yml:
services:
# ...
sonata.admin.user:
class: My\ProjectBundle\Admin\UserAdmin
tags:
- {name: sonata.admin, manager_type: orm, group: users, label: users}
arguments:
- null
- Application\Sonata\UserBundle\Entity\User
- SonataAdminBundle:CRUD
- @security.context #forth argument
calls:
- [setTranslationDomain, [MyProjectBundle]]
- [setUserManager, [@fos_user.user_manager]]
在你UserAdmin類,重寫構造:
namespace My\ProjectBundle\Admin;
class UserAdmin extends Admin
{
private $securityContext = null;
public function __construct($code, $class, $baseControllerName, $secutiryContext=null)
{
parent::__construct($code, $class, $baseControllerName);
$this->securityContext = $securityContext;
}
public function createQuery($context = 'list')
{
$query = parent::createQuery($context);
$query->andWhere(
$query->expr()->eq($query->getRootAlias().'.company', ':comp')
);
$query->setParameter('comp', $this->securityContext->user->getCompany());
return $query;
}
}
我沒有測試此代碼,但我使用此方法在sonata admin中注入service_container以使用Gedmo Uploadable管理文件上載。
希望這會有所幫助。
好的,我明白了,但我沒有在我的包中定義任何服務。如果我放一個,它不會被解釋。 –
嗯,這是因爲你必須調用服務定義中的setUserManager方法。請參閱vendor/sonata-project/user-bundle/Sonata/UserBundle/Resurces/config/admin_orm.xml – Picoss
是的,我刪除了我的第二條評論。關於我的第一個問題,你有線索嗎? –