Как установить FrontendUserGroup в AllowViewHelper VHS частично?

Я хочу установить параметр frontendUserGroup в AllowViewHelper, но я не знаю, как это сделать.

Иногда (недетерминированно, даже если я сбрасываю кеши) появляется такая ошибка:

Аргумент «frontendUserGroup» был зарегистрирован с типом «TYPO3 \ CMS \ Extbase \ Domain \ Model \ FrontendUserGroup», но имеет тип «строка» в помощнике представления «FluidTYPO3 \ Vhs \ ViewHelpers \ Security \ AllowViewHelper»

Правильно ли передавать просто ссылку на группу пользователей в качестве аргумента следующим образом ?:

{namespace v=FluidTYPO3\Vhs\ViewHelpers}
...
<v:security.allow frontendUserGroup="3">
  <f:then>
    <span>Access granted</span>
  </f:then>
  <f:else>
    <span>Access denied</span>
  </f:else>
</v:security.allow>

Параметр регистрируется ViewHelper следующим образом:

$this->registerArgument('frontendUserGroup', 'TYPO3\CMS\Extbase\Domain\Model\FrontendUserGroup', 'The FrontendUserGroup to allow/deny');

person Vertex    schedule 23.04.2015    source источник


Ответы (2)


Основываясь на вашем примере, вы можете просто использовать security.hasRole ViewHelper, поставляемый с CMS Fluid:

<f:security.ifHasRole role="3">
  <f:then>
    <span>Access granted</span>
  </f:then>
  <f:else>
    <span>Access denied</span>
  </f:else>
</f:security.ifHasRole>

В отличие от разрешения ViewHelper из EXT: vhs, этот ViewHelper принимает UID группы пользователей в качестве аргумента. Вместо UID вы также можете передать заголовок группы пользователей, но, насколько мне известно, это может быть неоднозначным.

person lorenz    schedule 24.04.2015

Вы должны передать фактический объект FrontendUserGroup (TYPO3\CMS\Extbase\Domain\Model\FrontendUserGroup) вашему представлению. Extbase предоставляет репозиторий, который вы можете вставить в свой контроллер:

/**
 * @var \TYPO3\CMS\Extbase\Domain\Repository\FrontendUserGroupRepository
 * @inject
 */
protected $frontendUserGroupRepository;

public function myAction() {
        ....
        $this->view->assign('specialUserGroup', $this->frontendUserGroupRepository->findByUid(3));
}

Теперь передайте этот объект в viewHelper:

<v:security.allow frontendUserGroup="{specialUserGroup}">
person Daniel    schedule 23.04.2015
comment
Спасибо за ваш ответ. Я бы не хотел создавать для этого собственный контроллер, поэтому принимаю ответ @lorenz. Но я даю вам лайк :) - person Vertex; 24.04.2015