覆盖特定用户角色的服务
Override service for specific user role
我有 3 个服务,只有当用户具有特定角色时才应覆盖默认服务。
甚至更好。在新服务中注入当前 user/security。
该服务然后执行用户角色检查并调用原始服务。
我试图将security.context
注入其中。但是然后 $security->getToken()
returns null
.
在控制器中它工作正常。我怎样才能让当前用户使用我的服务?这就是我想要做的:
class AlwaysVisibleNavigationQueryBuilder extends NavigationQueryBuilder
{
public function __construct(\Sulu\Component\Content\Compat\StructureManagerInterface $structureManager, $languageNamespace, SecurityContext $security)
{
if (in_array('ROLE_SULU_ADMINISTRATOR', $security->getToken()->getRoles())) {
// Show unpublished content, too
$this->published = false;
}
parent::__construct($structureManager, $languageNamespace);
}
}
在创建服务时,securityContext 不知道当前用户。安全性在应用程序运行时填充,而不是在依赖项解析时填充。
以下代码有效。
class AlwaysVisibleNavigationQueryBuilder extends NavigationQueryBuilder
{
protected $security;
public function __construct(\Sulu\Component\Content\Compat\StructureManagerInterface $structureManager, $languageNamespace, SecurityContext $security)
{
$this->security = $security;
parent::__construct($structureManager, $languageNamespace);
}
public function build($webspaceKey, $locales)
{
$roles = $this->security->getToken()->getRoles();
if (in_array('ROLE_SULU_ADMINISTRATOR', $roles)) {
// Show unpublished content, too
$this->published = false;
}
return parent::build($webspaceKey, $locales);
}
}
感谢 Matteo!
我有 3 个服务,只有当用户具有特定角色时才应覆盖默认服务。
甚至更好。在新服务中注入当前 user/security。 该服务然后执行用户角色检查并调用原始服务。
我试图将security.context
注入其中。但是然后 $security->getToken()
returns null
.
在控制器中它工作正常。我怎样才能让当前用户使用我的服务?这就是我想要做的:
class AlwaysVisibleNavigationQueryBuilder extends NavigationQueryBuilder
{
public function __construct(\Sulu\Component\Content\Compat\StructureManagerInterface $structureManager, $languageNamespace, SecurityContext $security)
{
if (in_array('ROLE_SULU_ADMINISTRATOR', $security->getToken()->getRoles())) {
// Show unpublished content, too
$this->published = false;
}
parent::__construct($structureManager, $languageNamespace);
}
}
在创建服务时,securityContext 不知道当前用户。安全性在应用程序运行时填充,而不是在依赖项解析时填充。
以下代码有效。
class AlwaysVisibleNavigationQueryBuilder extends NavigationQueryBuilder
{
protected $security;
public function __construct(\Sulu\Component\Content\Compat\StructureManagerInterface $structureManager, $languageNamespace, SecurityContext $security)
{
$this->security = $security;
parent::__construct($structureManager, $languageNamespace);
}
public function build($webspaceKey, $locales)
{
$roles = $this->security->getToken()->getRoles();
if (in_array('ROLE_SULU_ADMINISTRATOR', $roles)) {
// Show unpublished content, too
$this->published = false;
}
return parent::build($webspaceKey, $locales);
}
}
感谢 Matteo!