public function refreshSubscriptionsFor($userId)
    {
        $valid      = ['client:' . $userId];
        $account    = $this->getUserAccount($userId);
        $default    = [
            'admin:client',
            'admin:content',
            'admin:label',
            'admin:seo',
            'admin:site',
        ];

        if (!$account->isAuthenticated() || !$account->status) {
            // Do not allow deactivated or anymous user to incidently have
            // subscribed channels, it would be terrible performance loss
            // for pretty much no reason.
            $valid = [];

        } else {
            // Must handle user groupes instead
            if ($this->groupManager) {
                // @todo We MUST handle a role within the group instead of using
                //   global permissions, this must be fixed in a near future.
                $accessList = $this->groupManager->getUserGroups($account);
                if ($accessList) {
                    // Add group sites to user, but do not add anything else, when
                    // using the platform with groups, user with no groups are not
                    // considered and must not receive anything.
                    if ($account->hasPermission(Access::PERM_NOTIF_CONTENT)) {
                        foreach ($accessList as $access) {
                            $valid[] = 'admin:content:' . $access->getGroupId();
                        }
                    }
                    if ($account->hasPermission(Access::PERM_NOTIF_SITE)) {
                        foreach ($accessList as $access) {
                            $valid[] = 'admin:site:' . $access->getGroupId();
                        }
                    }
                }

            } else {
                // Normal behaviors, when the group module is not enabled.
                if ($account->hasPermission(Access::PERM_NOTIF_CONTENT)) {
                    $valid[] = 'admin:content';
                }
                if ($account->hasPermission(Access::PERM_NOTIF_SITE)) {
                    $valid[] = 'admin:site';
                }
            }

            // Those three, as of today, are not group-dependent.
            if ($account->hasPermission(Access::PERM_NOTIF_LABEL)) {
                $valid[] = 'admin:label';
            }
            if ($account->hasPermission(Access::PERM_NOTIF_SEO)) {
                $valid[] = 'admin:seo';
            }
            if ($account->hasPermission(Access::PERM_NOTIF_USER)) {
                $valid[] = 'admin:client';
            }
        }

        $remove = array_diff($default, $valid);

        if ($valid) {
            $subscriber = $this->notificationService->getSubscriber($userId);

            foreach ($valid as $chanId) {

                if ($subscriber->hasSubscriptionFor($chanId)) {
                    continue;
                }

                try {
                    $subscriber->subscribe($chanId);
                } catch (ChannelDoesNotExistException $e) {
                    $this->notificationService->getBackend()->createChannel($chanId);
                    $subscriber->subscribe($chanId);
                }
            }
        }

        if ($remove) {
            $this->deleteSubscriptionsFor($userId, $remove);
        }
    }