Sonata Admin 中的 SecurityToken 为 null class
SecurityToken null in Sonata Admin class
我在获取登录用户和管理员 class 时遇到问题。我想做的是将选择字段限制为登录用户组织(这样他就无法在创建事件时选择另一个组织)。因此,我已将 TokenStorage 注入我的 CalendarAdmin,但 $tokenStorage->getToken() 为空,即使我已登录。
这是我的相关代码:
security.yml:
providers:
in_memory:
memory: ~
fos_userbundle:
id: fos_user.user_manager
admin:
pattern: /admin(.*)
context: user
form_login:
provider: fos_userbundle
login_path: /admin/login
use_forward: false
check_path: /admin/login_check
failure_path: null
logout:
path: /admin/logout
anonymous: true
services.yml:
pozsonyba.calendar_bundle.admin.calendar:
class: Pozsonyba\Bundle\CalendarBundle\Admin\CalendarAdmin
arguments: [~, Pozsonyba\Bundle\CalendarBundle\Entity\Calendar, SonataAdminBundle:CRUD, @security.token_storage, @pozsonyba_organization.repository.organization_repository]
tags:
- {name: sonata.admin, manager_type: orm, group: admin, label: Calendar}
我读到这个 security.yml 可能设置错误,防火墙缺少某些东西,我只是想不通是什么。
感谢您的帮助。
CalendarAdmin.php:
public function __construct($code, $class, $baseControllerName, TokenStorage $tokenStorage, OrganizationRepository $organizationRepository)
{
parent::__construct($code, $class, $baseControllerName);
VarDumper::dump($tokenStorage->getToken());die;
$this->organizationRepository = $organizationRepository;
}
查看 \Sonata\AdminBundle\Admin\AbstractAdmin
class。您可以通过配置池访问容器和令牌存储:
$this->getConfigurationPool()->getContainer()->get('security.token_storage')->getToken()->getUser()
我想,创建管理对象时未设置令牌,因此作为替代方法,您可以尝试通过 setter 注入来注入 TokenStorage
:
# CalendarAdmin.php
/** @var TokenStorageInterface */
private $tokenStorage;
/**
* @param TokenStorageInterface $tokenStorage
*/
public function setTokenStorage($tokenStorage)
{
$this->tokenStorage = $tokenStorage;
}
更新服务定义
# services.yml
pozsonyba.calendar_bundle.admin.calendar:
class: Pozsonyba\Bundle\CalendarBundle\Admin\CalendarAdmin
arguments: [~, Pozsonyba\Bundle\CalendarBundle\Entity\Calendar, SonataAdminBundle:CRUD, @security.token_storage, @pozsonyba_organization.repository.organization_repository]
calls:
- [setTokenStorage, ["@security.token_storage"]]
tags:
- {name: sonata.admin, manager_type: orm, group: admin, label: Calendar}
我在获取登录用户和管理员 class 时遇到问题。我想做的是将选择字段限制为登录用户组织(这样他就无法在创建事件时选择另一个组织)。因此,我已将 TokenStorage 注入我的 CalendarAdmin,但 $tokenStorage->getToken() 为空,即使我已登录。 这是我的相关代码:
security.yml:
providers:
in_memory:
memory: ~
fos_userbundle:
id: fos_user.user_manager
admin:
pattern: /admin(.*)
context: user
form_login:
provider: fos_userbundle
login_path: /admin/login
use_forward: false
check_path: /admin/login_check
failure_path: null
logout:
path: /admin/logout
anonymous: true
services.yml:
pozsonyba.calendar_bundle.admin.calendar:
class: Pozsonyba\Bundle\CalendarBundle\Admin\CalendarAdmin
arguments: [~, Pozsonyba\Bundle\CalendarBundle\Entity\Calendar, SonataAdminBundle:CRUD, @security.token_storage, @pozsonyba_organization.repository.organization_repository]
tags:
- {name: sonata.admin, manager_type: orm, group: admin, label: Calendar}
我读到这个 security.yml 可能设置错误,防火墙缺少某些东西,我只是想不通是什么。
感谢您的帮助。 CalendarAdmin.php:
public function __construct($code, $class, $baseControllerName, TokenStorage $tokenStorage, OrganizationRepository $organizationRepository)
{
parent::__construct($code, $class, $baseControllerName);
VarDumper::dump($tokenStorage->getToken());die;
$this->organizationRepository = $organizationRepository;
}
查看 \Sonata\AdminBundle\Admin\AbstractAdmin
class。您可以通过配置池访问容器和令牌存储:
$this->getConfigurationPool()->getContainer()->get('security.token_storage')->getToken()->getUser()
我想,创建管理对象时未设置令牌,因此作为替代方法,您可以尝试通过 setter 注入来注入 TokenStorage
:
# CalendarAdmin.php
/** @var TokenStorageInterface */
private $tokenStorage;
/**
* @param TokenStorageInterface $tokenStorage
*/
public function setTokenStorage($tokenStorage)
{
$this->tokenStorage = $tokenStorage;
}
更新服务定义
# services.yml
pozsonyba.calendar_bundle.admin.calendar:
class: Pozsonyba\Bundle\CalendarBundle\Admin\CalendarAdmin
arguments: [~, Pozsonyba\Bundle\CalendarBundle\Entity\Calendar, SonataAdminBundle:CRUD, @security.token_storage, @pozsonyba_organization.repository.organization_repository]
calls:
- [setTokenStorage, ["@security.token_storage"]]
tags:
- {name: sonata.admin, manager_type: orm, group: admin, label: Calendar}