PollPermission

t3oodle has got a central class controlling poll permission logic.

Existing permissions are:

  • isViewingInGeneralAllowed($poll)
  • isViewingAllowed($poll)
  • isShowAllowed($poll)
  • isNewAllowed()
  • isNewSimplePollAllowed()
  • isNewSchedulePollAllowed()
  • isEditAllowed($poll)
  • isDeleteAllowed($poll)
  • isPublishAllowed($poll)
  • isFinishAllowed($poll)
  • isFinishSuggestionModeAllowed($poll)
  • isSuggestNewOptionsAllowed($poll)
  • isVotingAllowed($poll)
  • isSeeParticipantsDuringVotingAllowed($poll)
  • isSeeVotesDuringVotingAllowed($poll)
  • isAdministrationAllowed($poll)
  • isResetVotesAllowed($poll)
  • isDeleteOwnVoteAllowed($vote) !!!

They are used in controller actions, as well as in Fluid templates.

Permission ViewHelper

<f:if condition="{t3oodle:permission(action:'newSimplePoll')}">
    // show new button
</f:if>

The action is passed without trailing is and Allowed.

When a permission requires poll or vote argument, you can call it like this:

<f:if condition="{poll -> t3oodle:permission(action:'delete')}">
    // show delete button, for this poll
</f:if>

Modifying permissions

Every permission can get changed programmatically, by using Signal/Slots.

First register your slot in ext_localconf.php:

/** @var \TYPO3\CMS\Extbase\SignalSlot\Dispatcher $signalSlotDispatcher */
$signalSlotDispatcher = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\SignalSlot\Dispatcher::class);
$signalSlotDispatcher->connect(
    \FGTCLB\T3oodle\Domain\Permission\PollPermission::class,
    'isNewSimplePollAllowed',
    \Vendor\MyExt\Slots\PollPermissionSlots::class,
    'isNewSimplePollAllowed'
);

The PollPermissionSlots class looks like this:

final class PollPermissionSlots
{
    public function isNewSimplePollAllowed(bool $currentStatus, array $arguments, PollPermission $caller): array
    {
        $newStatus = false; // TODO: implement me
        return [
            'currentStatus' => $newStatus,
            'arguments' => $arguments,
            'caller' => $caller,
        ];
    }
}