Skip to main content
2 of 4
added more context regarding currentUser object

Why doesn't currentUser return correct permissions?

This happens a lot of the time with custom resources and I cannot figure out why. Custom permissions return wrong value with currentUser but returns correct value when loading user by uid. $this->currentUser is valid and the correct account. What's the issue/cause and resolution?

Example:

Wrong value:

$hasViewPermission = $this->currentUser->hasPermission(
    sprintf('view %s categories', $termGroup)
);
// false

Correct value

$user = User::load(\Drupal::currentUser()->id());
$hasViewPermission = $user->hasPermission(
    sprintf('view %s categories', $termGroup)
);
// true

Role config

permissions:
  ...
  - 'view EDITORIAL categories'

Edit: added demo of currentUser initialisation

    protected $currentUser;

    public function __construct(
        array $configuration, $plugin_id,
        $plugin_definition,
        array $serializer_formats,
        LoggerInterface $logger,
        AccountProxyInterface $current_user,
        Request $current_request
    ) {
        parent::__construct($configuration, $plugin_id, $plugin_definition, $serializer_formats, $logger);
        $this->currentUser = $current_user;
        $this->currentRequest = $current_request;
    }


    public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition)
    {
        return new static(
            $configuration,
            $plugin_id,
            $plugin_definition,
            $container->getParameter('serializer.formats'),
            $container->get('logger.factory')->get('custom_rest'),
            $container->get('current_user'),
            $container->get('request_stack')->getCurrentRequest()
        );
    }